Django简介

Posted xuechengeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django简介相关的知识,希望对你有一定的参考价值。

目录

一:GET/POST请求

 

请求流程

浏览器访问地址-->进入urls文件匹配地址(可以携带数据)-->
GET请求-->进入views下的视图函数-->
request携带前台数据-->views内函数进行逻辑处理

分析

def login(request):
    # request是个对象,封装了浏览器提交过来的所有数据
    # 去除前端传递过来的数据(get/post)
    # post形式传过来的
    # request.method 是请求方式,请求方式是大写的
    if request.method == GET:
        # render 第一个参数是request对象,必须要传,第二个参数是:模板的路径
        return render(request, login.html)  #进入登录页面填数据
    else:
        # request.POST 是一个字典,字典中放着浏览器post形式提交过来的数据
        # request.GET 是一个字典,字典中放着浏览器get形式提交过来的数据
        name = request.POST.get(name, None) #拿不到,取None为默认值,可以不写
        pwd = request.POST.get(pwd)
        if name == lqz and  pwd == 123:
            return redirect(https://www.baidu.com)
        else:
            # 只要返回,一定要返回HttpResponse的对象
            return HttpResponse(用户名或密码错误)

二:三件套

本质上返回的都是HttpResponse对象

render:返回一个模板(页面)

#最后一个参数是给html传值
render(request, updateuser.html, {user: user})

redirect:重定向到某个地址

redirect(https://www.baidu.com)
redirect(‘/user_list/‘)

HttpResponse:返回字符串

HttpResponse(error)

三:orm简介

 

简介

orm能创建表,创建字段,删除字段,修改字段,但是不能创建数据库
-是什么?对象关系映射
-python代码《---对象--》orm层转换《-----sql---》mysql/oracle
-要创建一个表,有了orm,只需要写一个类就可以了

连接数据库

 0 手动创建出数据库:chuck
 1 在settings中配置:

default: {
# 这些key必须都是大写
ENGINE: django.db.backends.mysql,
# 数据库名字
NAME: chuck,
HOST: 127.0.0.1,
PORT: 3306,
USER: root,
PASSWORD:root,
}

 2 再app的init文件中写:

import pymysql
pymysql.install_as_MySQLdb()

 3 在models中创建类,类中写字段

class UserInfo(models.Model):
        id=models.AutoField(primary_key=True)
        name=models.CharField(max_length=32)
        pwd=models.CharField(max_length=32)

 4 把表同步到数据库

#数据库表并没有同步到数据库,只是在migrations内做了一个记录
-python3 manage.py makemigrations
#将数据表同步到数据库
-python3 mangae.py migrate

查询

查询表中所有数据,是一个QuerySet对象(先把queryset对象当成列表),其中每一条数据就是一个userinfo的对象
ret=UserInfo.objects.all()

UserInfo.objects.filter(name=name,pwd=pwd) 也是queryset对象,
first从列表中取出第一个值,ret是userInfo的对象
ret = UserInfo.objects.filter(name=name, pwd=pwd).first()
#ret=UserInfo.objects.filter(name=name,pwd=pwd)[0] --第二种取值方式

四:orm的登录注册

 

登录/注册/用户增删改查

技术分享图片
 1 from django.conf.urls import url
 2 from django.contrib import admin
 3 from app01 import views
 4 urlpatterns = [
 5     url(r^admin/, admin.site.urls),
 6     # 对应着view中一个函数,但是不能加括号
 7     url(r^login/, views.login),
 8     url(r^register/, views.register),
 9     url(r^user_list/, views.userlist),
10     url(r^deleteuser/, views.deleteuser),
11     url(r^updateuser/, views.updateuser),
12 ]
urls.py
技术分享图片
 1 from django.shortcuts import render, redirect, HttpResponse
 2 
 3 from app01.models import UserInfo
 4 
 5 def login(request):
 6     if request.method == GET:
 7         return render(request, login.html)
 8     else:
 9         name = request.POST.get(name, None)
10         pwd = request.POST.get(pwd)
11         # orm查询
12         # 查询表中所有数据,是一个QuerySet对象(先把queryset对象当成列表),其中每一条数据就是一个userinfo的对象
13         # ret=UserInfo.objects.all()
14         # print(ret)
15         # for user  in ret:
16         #     print(user.name)
17         # UserInfo.objects.filter(name=name,pwd=pwd) 也是queryset对象,
18         # first从列表中取出第一个值,ret是userInfo的对象
19         ret = UserInfo.objects.filter(name=name, pwd=pwd).first()
20         # ret=UserInfo.objects.filter(name=name,pwd=pwd)[0]
21         if ret:
22             return redirect(https://www.baidu.com)
23         else:
24             return HttpResponse(error)
25 
26 
27 def register(request):
28     if request.method == GET:
29         return render(request, register.html)
30     else:
31         name = request.POST.get(name)
32         pwd = request.POST.get(pwd)
33         re_pwd = request.POST.get(re_pwd)
34         if pwd == re_pwd:
35             ret = UserInfo.objects.create(name=name, pwd=pwd)
36             # 一旦创建成功,会把user对象返回
37             print(ret)
38             # 重定向到用户列表
39             return redirect(/user_list/)
40         else:
41             return HttpResponse(两次密码不一致)
42 
43 
44 def userlist(request):
45     user_l = UserInfo.objects.all()
46     print(user_l[0])
47 
48     # ll=[1,2,3]
49     return render(request, userlist.html, {userlist: user_l})
50 
51 
52 def deleteuser(request):
53     id = request.GET.get(id)
54     ret = UserInfo.objects.filter(id=id).delete()
55     # ret是元组,元组的第一个值是影响的行数,第二个值是字典key是类名,第二个是该表受影响的行数
56     print(ret)
57     return redirect(/user_list/)
58 
59 
60 def updateuser(request):
61     if request.method == GET:
62         id = request.GET.get(id)
63         user = UserInfo.objects.filter(id=id).first()
64         # 最后一个参数是给html传值
65         return render(request, updateuser.html, {user: user})
66     else:
67         id = request.POST.get(id)
68         name = request.POST.get(name)
69         pwd = request.POST.get(pwd)
70         ret = UserInfo.objects.filter(id=id).update(name=name, pwd=pwd)
71         # ret 是int类型,影响的行数
72         print(ret)
73         return redirect(/user_list/)
views.py
技术分享图片
 1 from django.db import models
 2 
 3 # Create your models here.
 4 # 写一个类,必须继承models.Model
 5 class UserInfo(models.Model):
 6     # 类的属性,对应着表中的字段
 7     # 在表中生成一个id字段,类型为int自增,并且为逐渐
 8     id = models.AutoField(primary_key=True)
 9     # 会在表中生成一个字段,字段类型是varchar类型,长度为32
10     # 如果用charfield,max_length必须写
11     name = models.CharField(max_length=32)
12     pwd = models.CharField(max_length=32)
models.py
技术分享图片
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>修改</title>
 6 </head>
 7 <body>
 8 <form action="/updateuser/" method="post">
 9     <input type="hidden" name="id" value="{{ user.id }}">
10     <p>用户:<input type="text" name="name" value="{{ user.name }}"></p>
11     <p>密码:<input type="text" name="pwd" value="{{ user.pwd }}"></p>
12 {#    提交的时候发起post请求#}
13     <input type="submit" value="提交">
14 
15 </form>
16 </body>
17 </html>
updateuser.html
技术分享图片
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>注册</title>
 6 </head>
 7 <body>
 8 <form action="/register/" method="post">
 9     <p>用户:<input type="text" name="name"></p>
10     <p>密码:<input type="password" name="pwd"></p>
11     <p>确认密码:<input type="password" name="re_pwd"></p>
12     <input type="submit" value="提交">
13 
14 </form>
15 </body>
16 </html>
register.html
技术分享图片
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>登陆</title>
 6 </head>
 7 <body>
 8 <form action="/login/" method="post">
 9     <p>用户:<input type="text" name="name"></p>
10     <p>密码:<input type="password" name="pwd"></p>
11     <input type="submit" value="提交">
12 
13 </form>
14 </body>
15 </html>
login.html
技术分享图片
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>用户列表</title>
 6 </head>
 7 <body>
 8 <table border="1">
 9     <thead>
10     <tr>
11         <th>id</th>
12         <th>name</th>
13         <th>pwd</th>
14         <th>编辑</th>
15         <th>删除</th>
16     </tr>
17 
18     </thead>
19     <tbody>
20     {% for user in userlist %}
21         <tr>
22         <td>{{ user.id }}</td>
23         <td>{{ user.name }}</td>
24         <td>{{ user.pwd }}</td>
25         <td><a href="/updateuser/?id={{ user.id }}">编辑</a></td>
26         <td><a href="/deleteuser/?id={{ user.id }}">删除</a></td>
27         </tr>
28     {% endfor %}
29 
30     </tbody>
31 </table>
32     {% for foo in ll %}
33         <p>{{ foo }}</p>
34     {% endfor %}
35 </body>
36 
37 </html>
userlist.html

五:Django请求生命周期

技术分享图片

 

以上是关于Django简介的主要内容,如果未能解决你的问题,请参考以下文章

django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段

Android 逆向类加载器 ClassLoader ( 类加载器源码简介 | BaseDexClassLoader | DexClassLoader | PathClassLoader )(代码片段

Django REST框架--认证和权限

如何在 Django 中显式重置模板片段缓存?

Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段

使用 Django 模板作为片段