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 ]
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/‘)
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)
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>
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>
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>
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>
五:Django请求生命周期
以上是关于Django简介的主要内容,如果未能解决你的问题,请参考以下文章
django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段
Android 逆向类加载器 ClassLoader ( 类加载器源码简介 | BaseDexClassLoader | DexClassLoader | PathClassLoader )(代码片段
Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段