目录

  • 项目结构
  • 在数据库中生成数据表
  • 模板的基本使用:
  • Django流程梳理

项目结构

切换到创建项目的目录 cd C:\Users\admin\Desktop\DjangoProject
创建名为project的项目命令 django-admin startproject project
注:所有路径不要有中文
切换到目录cd C:\Users\admin\Desktop\DjangoProject\project
目录层级说明:manage.py 一个命令行工具,可以让我们用多种方式对Django项目进行交互
init.py 一个空文件,它告诉Python这个目录应该被看做一个包
settings.py 项目的配置文件(主要处理文件)
urls.py 项目的url声明 (主要处理文件)
wsgi.py 项目与WSGI兼容的Web服务器入口
配置数据库 Django默认使用SQLite数据库
在settings.py文件中通过DATABASES选项进行数据库配置
配置MySQL Python3.x中安装的是PyMySQL
在__init__.py文件中写入两行代码import pymysql
pymysql.install_as_MySQLdb()
以数据库sunck为例进行示范:对settings.py中的DATABASES进行设置
DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’,
‘NAME’: “sunck”,
‘USER’: “root”,
‘PASSWORD’: “admin123”,
‘HOST’: “localhost”,
‘PORT’: “3306”
}
}
创建应用–在一个项目中可以创建多个应用,每个应用进行一种业务处理
打开CMD,进入project(目录名)的目录下,输入命令创建名为myApp的app:
python manage.py startapp myAPP
myAPP目录说明
admin.py 进行站点配置
models.py 创建模型
views.py 创建视图
激活应用 在settings.py文件中,将myApp应用加入到INSTALLED_APPS选项中
INSTALLED_APPS = [
‘django.contrib.admin’,
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.messages’,
‘django.contrib.staticfiles’,
‘myApp’,
]
定义模型 概述:有一个数据表就对应有一个模型
在models.py文件中定义模型
引入:from django.db import models
模型类要继承models.Model类
示例:
class Grades(models.Model):
gname = models.CharField(max_length=20)
gdate = models.DateTimeField()
ggirlnum = models.IntegerField()
gboynum = models.IntegerField()
isDelete = models.BooleanField(default=False)

            class Students(models.Model):sname = models.CharField(max_length=20)sgender = models.BooleanField(default=True)sage = models.IntegerField()scontend = models.CharField(max_length=20)isDelete = models.BooleanField(default=False)sgrade = models.ForeignKey("Grades", on_delete=models.CASCADE,)说明:不需要定义主键,在生成时自动添加,并且值为自动增加

在数据库中生成数据表

生成迁移文件执行 python manage.py makemigrations    在migrations目录下生成一个迁移文件,此时数据库中还没有生成数据表
执行迁移执行 python manage.py migrate           相当于执行MySQL语句创建了数据表

测试数据操作
进入到python shell
执行 python manage.py shell
引入包
from myApp.models import Grades, Students
from django.utils import timezone
from datetime import *
查询所有数据
类名.objects.all()
示例: Grades.objects.all()
添加数据
本质:创建一个模型类的对象实例
示例:CMD窗口下:
grade1 = Grades()
grade1.gname = “python04”
grade1.gdate = datetime(year=2017, month=7, day=17)
grade1.ggirlnum = 3
grade1.gboynum = 70
grade1.save()
查看某个对象
类名.objects(pk=索引号)
示例:
Grades.objects.get(pk=2)
Grades.objects.all()
修改某个数据
模型对象属性 = 新值
示例:
grade2.gboynum = 60
grade2.save()
删除数据
模型对象.delete()
grade2.delete()
注意:这是物理删除,数据库中的相应数据被永久删除
关联对象
示例:
stu = Students()
stu.sname = “Xue Yanmei”
stu.sgender = False
stu.sage = 20
stu.scontend = “I am Xue Yanmei”
stu.sgrade = grade1
stu.save()
获得关联对象的集合
需求:猎取python04班级的所有学生
对象名.关联的类名小写_set.all()
示例:grade1.students_set.all()
需求:创建曾志伟,属于python04班级
示例:
stu3 = grade1.students_set.create(sname=u’Zhen Zhiwei’,sgender=True,scontend=u"I am Zhen Zhiwei",sage=45)
注意:这样创建的数据直接被添加到了数据库当中。
启动服务器:
格式:python manage.py runserver ip:port
注意:ip可以不写,不写代表本机ip
端口号默认是8000
python manage.py runserver
说明:
这是一个纯python编写的轻量级web服务器,仅仅在开发测试中使用这个
Admin站点管理:
概述:
内容发布:负责添加,修改,删除内容的
公告访问
配置Admin应用:
在settings.py文件中的INSTALLED_APPS中添加’django.contrib.admin’,
这条默认是添加好的。
创建管理员用户:
在项目目录下执行 python manage.py createsuperuser
依次输入账号名,邮箱,密码即可完成用户创建
登陆:
http://127.0.0.1:8000/admin/
汉化:
把project\settings.py
中作如下设定:LANGUAGE_CODE = ‘zh-Hans’
TIME_ZONE = ‘Asia/Shanghai’
管理数据表:
修改 myAPP\admin.py 如下:
from django.contrib import admin
# Register your models here.
from .models import Grades, Students
# 注册
admin.site.register(Grades)
admin.site.register(Students)
自定义管理页面:
属性说明
# 列表页属性
list_display = [] # 显示字段设置
list_filter = [] # 过滤字段设置
search_fields = [] # 搜索字段设置
list_per_page = [] # 分页设置
# 添加,修改页属性
fields = [] # 规定属性的先后顺序
fieldsets = [] # 给属性分组 注意:fields与fieldsets不能同时使用
属性示例:
# 列表页属性
list_display = [‘pk’, ‘gname’, ‘gdate’, ‘ggirlnum’, ‘gboynum’, ‘isDelete’]
list_filter = [‘gname’]
search_fields = [‘gname’]
list_per_page = 5
# 添加,修改页属性
# fields = [‘ggirlnum’, ‘gboynum’, ‘gname’, ‘gdate’, ‘isDelete’]
fieldsets = [
(“num”,{“fields”:[‘ggirlnum’, ‘gboynum’]}),
(“base”, {“fields”:[“gname”, “gdate”, “isDelete”]}),
]
关联对象:需求:在创建一个班级时可以直接添加几个学生
class StudentsInfo(admin.TabularInline):# 可选参数admin.StackedInline
model = Students
extra = 2
class GradesAdmin(admin.ModelAdmin):
inlines = [StudentsInfo]
布尔值显示问题示例:
class StudentsAdmin(admin.ModelAdmin):
def gender(self):
if self.sgender:
return “男”
else:
return “女”
# 设置页面列的名称
gender.short_description = “性别”
list_display = [‘pk’, ‘sname’, ‘sage’, gender,
‘scontend’, ‘sgrade’, ‘isDelete’]
list_per_page = 10
admin.site.register(Students, StudentsAdmin)
执行按钮位置:
class StudentsAdmin(admin.ModelAdmin):
…snip…
actions_on_top = False
actions_on_bottom = True
admin.site.register(Students, StudentsAdmin)
使用装饰器完成注册:
@admin.register(Students)
class StudentsAdmin(admin.ModelAdmin):
def gender(self):
…snip…
actions_on_top = False
actions_on_bottom = True
视图的基本使用
概述:
在Django中,视图是对web请求进行回应
视图就是一个python函数,在views.py文件中定义。
定义视图:
示例:在myApp\views.py中写入
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
def index(request):
return HttpResponse(“Sunck is a good man”)
配置url:方法一:path方法:
修改project目录下的urls.py文件:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path(‘admin/’, admin.site.urls),
path(’’, include(‘myApp.urls’)),
]
在myApp应用目录下创建urls.py文件:
from django.urls import path, include
from . import views
urlpatterns = [
path(’’,views.index),
]
配置url:方法二:url方法:
修改project目录下的urls.py文件:
from django.contrib import admin
from django.conf.urls import url,include
urlpatterns = [
url(r’^admin/’, admin.site.urls),
url(r’^’, include(‘myApp.urls’)),
]
在myApp应用目录下创建urls.py文件:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r’^$’, views.index),
]

模板的基本使用:

概述:模板是HTML页面,可以根据视图中传递过来的数据进行填充
创建模板:创建templates目录,在目录下创建对应项目的模板目录(project/templates/myApp)
配置模板路径:修改settings.py文件下的TEMPLATES下的'DIRS'为'DIRS': [os.path.join(BASE_DIR, 'templates')],
定义grades.html与students.html模板:在templates\myApp\目录下创建grades.html与students.html模板文件模板语法:{{输出值,可以是变量,也可以是对象,属性}}{%执行代码段%}
http://127.0.0.1:8000/grades写grades.html模板:<!doctype html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>班级信息</title></head><body><h1>班级信息列表</h1><ul><!--[python04, python05, python06]-->{%for grade in grades%}<li><a href="#">{{grade.gname}}</a></li>{%endfor%}</ul></body></html>定义视图:myApp\views.pyfrom .models import Gradesdef grades(request):# 去模板里取数据gradesList = Grades.objects.all()# 将数据传递给模板,模板再渲染页面,将渲染好的页面返回给浏览器return render(request, 'myApp/grades.html', {"grades": gradesList})配置url:myApp\urls.pyurlpatterns = [url(r'^$', views.index),url(r'^(\d+)/(\d+)$', views.detail),url(r'^grades/', views.grades)]
http://127.0.0.1:8000/students写students.html模板<!doctype html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>学生页面</title></head><body><h1>学生信息列表</h1><ul>{%for student in students%}<li>{{student.sname}}--{{student.scontend}}</li>{%endfor%}</ul></body></html>定义视图:myApp\views.pyfrom .models import Studentsdef students(request):studentsList = Students.objects.all()return render(request, 'myApp/students.html', {"students": studentsList})配置url:myApp\urls.pyurlpatterns = [url(r'^$', views.index),url(r'^(\d+)/(\d+)$', views.detail),url(r'^grades/', views.grades),url(r'^students/', views.students),]
需求:点击班级,显示对应班级的学生名字运行不正常https://www.bilibili.com/video/av17879644/?p=12

Django流程梳理

创建工程:执行 django-admin startproject 工程名
创建项目:执行 python manage.py startapp 项目名称
激活项目:修改 settings.py中的INSTALLED_APPS
配置数据库:修改__init__.py文件修改settings.py文件中的DATABASES
创建模型类:在项目目录下的models.py文件中创建
生成迁移文件:执行python manage.py makemigrations
执行迁移:执行python manage.py migrate
配置站点:略
创建模板目录/项目模板目录
在settings.py中的TEMPLATES添加templates路径
在工程目录下(project)修改urls.py
在项目目录下创建urls.py

使用他人Django代码需要的简易修改:
1.在settings.py中修改数据库名
2.在settings.py中修改数据库密码
3.删除由内向外文件(在对应目录里鼠标右键删除)
4.在数据库中创建对应第一步的数据库(自己在SQL中创建)
5.执行生成迁移文件
6.执行迁移
7.启动服务
8.浏览器测试

Django模型
Django对各种数据库提供了很好的支持,Django为这些数据库提供了统一的调用API
我们可以根据不同的业务需求选择不同的数据库。
配置数据库
修改工程目录下的__init__.py文件
import pymysql
pymysql.install_ad_MySQLdb()
修改settings.py文件中的DATABASES
开发流程
配置数据库
定义模型类:一个模型都在数据库中对应一张数据库表
生成迁移文件
执行迁移生成数据表
使用模型类进行增删改查
ORM
概述:对象-关系-映射
任务:
根据对象的类型生成表结构
将对象,列表的操作转换成SQL语句
将SQL语句查询到的结果转换为对象,列表
优点:
极大的减轻了开发人员的工作量,不需要面对因数据库的变更而修改代码的问题
定义模型
模型,属性,表,字段之间的关系
一个模型类在数据库中对应一张表,在模型类中定义的属性,对应该模型对照表中的一个字段
定义属性:见下文
创建模型类
元选项
在模型类中定义Meta类,用于设置元信息
示例:
class Meta:
db_table = “students”
ordering = [‘id’]
db_table
定义数据表名,推荐用小写字母,数据表名默认为项目名小写_类名小写
ordering
对象的默认排序字段,获取对象的列表时使用
示例:
ordering[‘id’] id按升序排列
ordering[’-id’] id按降序排列
注意:排序会增加数据库开销
模型成员
类属性
隐藏类属性objects:
是Manager类型的一个对象,作用是与数据库进行交互
当定义模型类时没有指定管理器,则Django为模型创建一个名为objects的管理器
自定义管理器示例:
定义stuObj管理器:
stuObj = models.Manager()
当为模型指定模型管理器,Django就不再为模型类生成objects模型管理器了。
自定义管理器Manager类
模型管理器是Django的模型进行与数据库交互的窗口,一个模型可以有多个模型管理器
作用:
向管理器类中添加额外的方法
修改管理器返回的原始查询集
通常会重写get_queryset()方法
代码示例:
class StudentsManager(models.Manager):
def get_queryset(self):
return super(StudentsManger, self).get_queryset().filter(isDelete=False)

                class Students(model.Moder):# 自定义模型管理器# 当自定义模型管理器,objects就不存在了stuObj = models.Manger()stuObj2 = StudentsManager()创建对象目的:向数据库中添加数据当创建对象时,django不会对数据库进行读写操作,当调用save()方法时才与数据库交互,将对象保存在数据库表中。注意:__init__方法已经在父类models.Model中使用,在自定义的模型中无法使用。方法:在模型类中增加一个类方法,示例如下:class Students(model.Moder):...snip...@classmethoddef createStudent(cls, name, age, gender, contend,grade,lastT, createT, isD=False):stu = cls(sname=name, sage=age, sgender=gender,scontend=contend, sgrade=grade, lastTime=lastT, createTime=createT,isDelete=isD)return stu在自定义管理器中添加一个方法,示例如下:class StudentsManager(models.Manager):def get_queryset(self):return super(StudentsManager, self).get_queryset().filter(isDelete=False)def createStudent(self, name, age, gender, contend, grade, lastT, createT, isD=False):stu = self.model()# print(type(grade))stu.sname = namestu.sage = agestu.sgender = genderstu.scontend = contendstu.sgrade = gradestu.lastTime = lastTstu.createTime = createTreturn stu模型查询概述查询集表示从数据库获取的对象的集合查询集可以有多个过滤器过滤器就是一个函数,基于所给的参数限制查询集结果从SQL角度来说,查询集和select语句等价,过滤器就像where条件查询集在管理器上调用过滤器方法返回查询集查询集经过过滤器筛选后返回新的查询集,所以可以写成链式调用惰性执行创建查询集不会带来任何数据库的访问,直到调用数据库时,才会访问数据直接访问数据的情况:迭代序列化与if合用返回查询集的方法称为过滤器all():返回查询集中的所有数据filter():保留符合条件的数据filter(键=值)filter(键=值,键=值)filter(键=值).filter(键=值)   且的关系exclude():过滤掉符合条件的order_by():排序values():一条数据就是一个字典,返回一个列表get()返回一个满足条件的对象注意:如果没有找到符合条件的对象,会引发模型类.DoesNotExist异常如果找到多个对象,会引发模型类MultipleObjectsReturned异常count():返回查询集中对象的个数first():返回查询集中第一个对象last():返回查询集中最后一个对象exits():判断查询集中是否有数据,如果有数据返回 True,否则返回 False.限制查询集查询集返回列表,可以使用下标的方法进行限制,等同于sql中的limit语句注意:下标不能是负数示例:studentsList = Students.stuObj2.all()[0:5]查询集的缓存概述:每个查询集都包含一个缓存,来最小化对数据库的访问在新建的查询集中,缓存首次为空,第一次对查询集求值,会发生数据缓存,Django会将查询出来的数据做一个缓存,并返回查询结果。以后的查询直接使用查询集的缓存字段查询概述实现了sql中的where语句,作为方法filter(),exclude(),get()的参数语法:属性名称__比较运算符=值外键:属性名称_id转义:类似sql中的like语句like有关情况看我哥他%是为了匹配点位,匹配数据中的%使用(where like "\%")filter(sname__contains="%")比较运算符exact:判断,大小写敏感filter(isDelete=False)contains:是否包含,大小写敏感studentsList = Students.stuObj2.filter(sname__contains="孙")startswith,endswith:以value开头或结尾,大小写敏感以上四个在前面加上i,就表示不区分大小写iexact,icontains,istartswith,iendswithisnull,isnotnull是否为空filter(sname__isnull=False)in:是否包含在范围内gt大于,gte大于等于,lt小于,lte小于等于year,month,day,week_day,hour,minute,secondstudentsList = Students.stuObj2.filter(lastTime__year=2017)跨关联查询处理join查询语法:模型类名__属性名__比较运算符# 描述中带有‘薛延美’这三个字的数据是属于哪个班级的grade = Grades.objects.filter(students__scontend__contains='薛延美')print(grade)查询快捷pk代表的主键聚合函数使用aggregate函数返回聚合函数的值AvgCountMaxmaxAge = Student.stuObj2.aggregate(Max('sage'))maxAge为最大的sage。MinSumF对象可以使用模型的A属性与B属性进行比较from django.db.models import F,Qdef grades1(request):g = Grades.objects.filter(ggirlnum__gt=F('gboynum'))print(g)# [<Grades: python02>,<Grades: python03>]return HttpResponse("OOOOOOOo")支持F对象的算术运算g = Grades.objects.filter(ggirlnum__gt=F('gboynum')+20)Q对象概述:过滤器的方法的关键字参数,条件为And模式需求:进行or查询解决:使用Q对象def students4(request):studentsList = Students.stuObj2.filter(Q(pk__lte=3) | Q(sage__gt=50))return render(request, 'myApp/students.html', {"students": studentsList})只有一个Q对象的时候,就是用于正常匹配条件studentsList = Students.stuObj2.filter(~Q(pk__lte=3))~Q是取反

定义属性
概述:
django根据属性的类型确定以下信息
当前选择的数据库支持字段的类型
渲染管理表单时使用的默认html控件
在管理站点最低限度的验证

    django会为表增加自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后,则django不会再生成默认的主键列属性命名限制遵循标识符规则,且变量不能与Python保留字相同由于django的查询方式,不允许使用连续的下划线库定义属性时,需要字段类型,字段类型被定义在django.db.models.fields目录下,为了方便使用,被导入到django.db.models中使用方式导入: from django.db import models通过 models.Field创建字段类型的对象,赋值给属性逻辑删除对于重要类型都做逻辑删除,不做物理删除,实现方法是定义idDelete属性,类型为BooleanField,默认值为False字段类型autoField一个根据实际ID自动增长的IntegerField,通常不指定,如果不指定,一个主键字段将自动添加到模型中CharField(max_length=字符长度)字符串,默认的表彰样式是TextInputTextField大文本字段,一般超过4000时使用,默认的表单控件是TextareaIntegerField整数DecimalField(max_digits=None, decimal_places=None)使用Python的Decimal实例表示的十进制浮点数参数说明DecimalField.max_digits位数总数DecimalField.decimal_places小数点后的数字位置FloatField使用Python的float实例来表示的浮点数BooleanFieldTrue/False 字段,此字段的默认表彰控制是CheckboxInputNullBooleanField支持 Null, True, False 三种值DateField([auto_now=False, auto_now_add=False])使用Python的datetime.date实例表示的日期参数说明:DateField.auto_now每次保存对象时,自动设置该字段为当前时间,用于“最后一次修改”的时间戳,它总是使用当前日期,默认为 FalseDateField.auto_now_add当前对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为 False说明该字段默认对应的表单控件是一个TextInput.在管理员站点添加了一个JavaScript写的日历控件,和一个“Today”的快捷按钮,包含了一个额外的invalid_date错误消息键注意auto_now_add, auto_now, and default 这些设置是相互排斥的,他们之间的任何组合将会发生错误的结果TimeField使用Python的datetime.time实例表示的时间,参数同DateFieldDateTimeField使用Python的datetimedatetime实例表示的日期和时间,参数同DateFieldFileField一个上传文件的字段ImageField继承了FileField的所有属性和方法,但对上传的对象进行校验,确保它是一个有效的image字段选项概述通过字段选项,可以实现对字段的约束在字段对象中通过关键字参数指定null如果为True,Django将空值以NULL存储在数据库中,默认值为 Falseblanke如果为True,则该字段允许为空白,默认值为 False注意null是数据库范畴的概念,blank是表彰验证范畴的概念db_column字段的名称,如果未指定,则使用属性的名称db_index若值为 True,则在表中会为此字段创建索引default默认值primary_key若为 True,则该字段会成为模型的主键字段unique如果为 True,这个字段在表中必须有唯一值关系分类ForeignKey:一对多,将字段定义在多的端中ManyToManyField:多对多,将字段定义在两端中OneToOneField:一对一,将字段定义在任意一端中用一访问多格式对象.模型类小写_set示例grade.students_set用一访问一格式对象.模型类小写示例grade.studnets访问id格式对象.属性_id示例student.sgrade_id

视图
概述:
作用:视图接收web请求,并响应web请求
本质:视图就是python中的一个函数
响应:
响应过程:
用户在浏览器中输入网址www.sunck.wang/sunck/index.html
—网址—>
django获取网址信息,去掉IP与端口号,网址变成:sunck/index.html
—虚拟路径与文件名—>
url管理器逐个匹配urlconf,记录视图函数
—视图函数名—>
视图管理,找到对应的视图去执行,返回结果给浏览器
—响应的数据—>
返回第一步:用户在浏览器中输入网址
网页
重定向
错误视图
404视图:找不到网页(url匹配不成功时返回)时返回
在templates目录下定义404.html
<!doctype html>

Document

页面丢失

{{request_path}}

request_path:导致错误的网址
配置settings.py
DEBUG
如果为 True,永远不会调用404页面,需要调整为 False 才会显示
ALLOWED_HOSTS = [’*’]
500视图:在视图代码中出现错误(服务器代码错误)
400视图:错误出现在客户的操作
JSON数据
url配置
配置流程:
制定根级url配置文件
settings.py文件中的ROOT_URLCONF
ROOT_URLCONF = ‘project.urls’
默认实现了
urlpatterns
一个url实例的列表
url对象
正则表达式
视图名称
名称
url匹配正则的注意事项
如果想要从url中获取一个值,需要对正则加小括号
匹配正则前方不需要加’/’
正则前需要加’r’表示字符串不转义
引入其他url配置
在应用中创建urls.py文件,定义本应用的url配置,在工程urls.py中使用include方法
project\ urls.py
from django.contrib import admin
from django.conf.urls import url,include
urlpatterns = [
url(r’^admin/’, admin.site.urls),
url(r’^’, include(‘myApp.urls’, namespace=“myAPP”)),
]
myApp\ urls.py
from django.urls import path, include
from django.conf.urls import url
from . import views
urlpatterns = [
url(r’^ KaTeX parse error: Expected 'EOF', got '&' at position 1055: …ck.wang/abc?a=1&̲b=2&c=3 …,否则无法匹配
views.py
def get1(request):
a = request.GET.get(‘a’)
b = request.GET.get(‘b’)
c = request.GET.get(‘c’)
return HttpResponse(a + " " + b + " " + c)

        www.sunck.wang/abc?a=1&a=2&c=3urls.pyurl(r'^get2', views.get2),views.pydef get2(request):a = request.GET.getlist('a')a1 = a[0]a2 = a[1]c = request.GET.get('c')return HttpResponse(a1 + " " + a2 + " " + c)POST属性使用表单模拟POST请求关闭CSRF:project\project\settings.pyMIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware',# 'django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',]示例:def showregist(request):return render(request, 'myApp/regist.html',)def regist(request):name = request.POST.get("name")gender = request.POST.get("gender")age = request.POST.get("age")hobby = request.POST.getlist("hobby")print(name)print(gender)print(age)print(hobby)return HttpResponse("regist")路径:url(r'^showregist/$', views.showregist),url(r'^showregist/regist/$', views.regist),页面:<!doctype html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>注册</title></head><body><form action="regist/" method="post">姓名:<input type="text" name="name" value=""/><hr>性别:<input type="radio" name="gender" value="1">男<input type="radio" name="gender" value="0">女<hr>爱好:<input type="checkbox" name="hobby" value="power"/>权利<input type="checkbox" name="hobby" value="money">金钱<input type="checkbox" name="hobby" value="beauty">美女<input type="checkbox" name="hobby" value="Tesla">Tesla<hr><input type="submit" value="注册"></form></body></html>
HttpResponse对象概述:作用:给浏览器返回数据HttpRequest对象是由Django创建的,HttpResponse对象是由程序员创建用法:不用模板,直接返回数据语句示例:return HttpResponse("Sunck is a good man")调用模板使用render方法原型:render(request, templateName[, context])作用:结合数据和模板,返回一个完整的HTML页面参数:request:请求体对象templateName:模板路径context:传递给需要渲染在模板上的数据属性content:表示返回内容charset:编码格式status_code:响应状态码200304404400content-type:指定输出的MIME类型方法init:使用页面内容实例化HttpResponse对象write(content):以文件的形式写入flush():以文件的形式输出缓冲区set_cookie(key, value, maxAge=None, exprise=None)delete_cookie(key):删除cookie如果删除一个不存在的cookie,就当什么都没发生子类HttpResponseRedirect功能:重定向,服务器端的跳转简写redirect(to)to推荐使用反向解析示例:from django.http import HttpResponseRedirectfrom django.shortcuts import redirectdef redirect1(request):# return HttpResponseRedirect('/redirect2')return redirect('/redirect2')def redirect2(request):return HttpResponse("我是重定向后的视图")子类JsonResponse返回Json数据,一般用于异步请求__init__(self.data)data 字典注意:Content-type类型为application/json
状态保持http协议是无状态的,每次请求都是一次新的请求,它不记得之前的请求。客户端与服务器的一次通信就是一次会话实现状态的保持,在客户端或服务端存储有关会话的数据存储的方式cookie:所有数据存储在客户端,不要存储敏感的数据session:所有的数据存储在服务端,在客户端用cookie存储session_id状态保持的目的:在一段时间内跟踪请求者的状态,可以实现跨页面访问当前的请求者的数据注意:不同的请求者之间不会共享这个数据,与请求者一一对应启用session:project\project\settings.pyINSTALLED_APPS    'django.contrib.sessions',MIDDLEWARE    'django.contrib.sessions.middleware.SessionMiddleware',使用session启用session后,每个httpRequest对象都有一个session属性get[key, default=None]    根据键获取session值clear()    清空所有会话flush()    删除当前会话并删除会话的cookie示例:# sessiondef main(request):# 取sessionusername = request.session.get('name', '游客')print(username)return render(request, 'myApp/main.html', {'username': username})def login(request):return render(request, 'myApp/login.html')def showmain(request):print("*****************")username = request.POST.get('username')# 存储sessionrequest.session['name'] = usernamereturn redirect('/main/')from django.contrib.auth import logoutdef quit(request):# 清除sessionlogout(request) # 方法1,推荐# request.session.clear() # 方法2request.session.flush() # 方法3return redirect('/main/')设置session过期时间set_expiry(value)request.session.set_expiry(10)  设置为10秒后过期如果不设置,2个星期后过期value设置为0代表关闭浏览器时过期value设置为None代表设置永不过期,不推荐

Django 千锋培训读书笔记相关推荐

  1. 千锋Flask学习笔记

    千锋Flask学习笔记 文章目录 千锋Flask学习笔记 写在前面 1. Flask介绍 2. Views 3. Request 4. Response 5. 会话技术 6. 模型和模板 7. 数据传 ...

  2. 千锋JavaScript学习笔记

    千锋JavaScript学习笔记 文章目录 千锋JavaScript学习笔记 写在前面 1. JS基础 1.1 变量 1.2 数据类型 1.3 数据类型转换 1.4 运算符 1.5 条件 1.6 循环 ...

  3. 千锋Unity学习笔记

    学习笔记:[千锋合集]史上最全Unity3D全套入门教程|匠心之作 文章目录 初级 1.0数学 1.0点乘叉乘 1.点乘: 2.叉乘: 2.0Mathf 3.0Vector 4.0旋转 2.0组件 3 ...

  4. 千锋培训的python怎么样学习内容有什么?

    众所周知,Python是人工智能时代的首选语言,近两年人工智能的兴起让Python一度成为最受欢迎的编程语言之一.想要学习Python的人也越来越多,那么千锋成都Python培训班怎么样?学习内容有什 ...

  5. python千锋培训地址

    Hello,各位锋迷们,我是小千. 今天周日,给大家推荐千锋金牌讲师宋宋最新出品的一套Python办公自动化教程. 扫码一键直达B站课程学习地址: 传送门:https://m.bilibili.com ...

  6. 千锋 Vue 详细笔记整理

    视频笔记是根据B站 千锋 涛哥 - SpringBoot+vue+前后端分离项目<锋迷商城>实战课-完结版 进行整理的 笔记可上 gitee仓库 自取 千锋 Vue 笔记整理 一.vue ...

  7. 计算机毕业设计django基于python的读书笔记共享平台

    项目介绍  本论文主要论述了如何使用PYTHON语言开发一个读书笔记共享平台 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发.在引言中,作者将论述读书笔 ...

  8. 计算机毕业设计django基于python的读书笔记共享平台(源码+系统+mysql数据库+Lw文档)

    项目介绍 本论文主要论述了如何使用PYTHON语言开发一个读书笔记共享平台 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发.在引言中,作者将论述读书笔记 ...

  9. 《Django By Example》读书笔记 03

    接下来我们要安装python的一个模块 pip install pytz 关于时区使用的几点想法: 如果你的网站可能有来自其它时区的,可能你要考虑这个问题.都是一个地区的话,还要看服务器是否与用户在一 ...

  10. 《Django By Example》读书笔记 02

    项目(Projects)和应用(applications)的区别 在Django中,项目是一个大的集合,应用是项目的一个模块,例如模板,视图,URL等和framework交互,提供某种特定功能,可复用 ...

最新文章

  1. ATS名词术语(待续)
  2. ORA-28000: the account is locked 的解决办法!
  3. BZOJ 2039: [2009国家集训队]employ人员雇佣
  4. YIFullScreenScroll
  5. docker配置容器mysql启动参数_修改Docker容器启动配置参数
  6. ITK:从图像区域中随机选择像素而不进行替换
  7. jQuery插件素材网站
  8. 图像处理之---双线性插值
  9. Android修炼之道—布局优化( 100 喵喵币)
  10. dnf打团正在连接服务器进不去是吗鬼,DNF韩服大转移版本开启 上线送迷你女鬼剑宠物...
  11. python字典找相同值_python-找出字典dic中重复值
  12. php 生日提醒,PHP中实现简单的生日提醒功能实例,简单又实用!
  13. 关于JAVA Graphics2D种drawLine方法参数说明
  14. 时间都去哪了--你统计过你每天花在手机上的时间么?
  15. Unity案例-实现心电图效果
  16. java取余位运算_使用位运算取余
  17. 使用canvas写一个flappy bird小游戏
  18. 计算机毕业设计之java+ssm基于HTML5的网上跳蚤市场+二手交易网站
  19. 怎么恢复微信聊天记录
  20. msp430 USB驱动

热门文章

  1. flutter TapBar自定义indicator、固定宽度、圆角、改变indicator和text的距离
  2. c/c++背景颜色和字体颜色
  3. 牛客小白月赛 22 C. 交换游戏
  4. 英语在线教育机构争战AI风口,为何雷声大雨点小?
  5. 《Deep Semantic Feature Learning for Software Defect Prediction》论文笔记
  6. Erlang 游戏开发经验总结
  7. AR涂涂乐项目之识别图制作制作地球仪线框一
  8. 解读《道德经》nbsp;五十六章nbsp;知者不言…
  9. 图论们,小爷来ak你们啦瓦咔咔~
  10. uniapp 电商小程序 订单30分钟倒计时