- 关系映射
-
一对一映射
任何一个类中:
属性 = models.OneToOneField(Entry)
数据查询:class Author(models.Model): xxx class Wife(models.Model): xxx author = models.OneToOneField(Author) Wife查找Author的话,直接通过 author 属性即可 Author查找Wife的话,通过隐式属性 wife 即可
-
一对多映射
在"多"的实体类中增加对"一"的实体类的引用:
属性 = models.ForeignKey(Entry)查询:
class Publisher(models.Model): xxx class Book(models.Model): xxx publisher = models.ForeignKey(Publisher) 通过 Book 查询Publisher ,直接通过 publisher 属性即可 通过 Publisher 查询 Book,通过隐式属性 book_set 来表示对book的查询引用
-
多对多映射
在关联的两个类的任意一个类中:
属性 = models.ManyToManyField(Entry)查询:
class Author(models.Model): pass class Book(models.Model): xxx authors = models.ManyToManyField(Author) 通过 Book 查询 Author ,通过 authors 表示book对Author的查询引用 通过 Author 查询 Book ,通过 隐式属性 book_set来表示对Book的查询引用
-
- request - 请求对象
- 常用成员
- request.path
- request.method
- request.GET
- request.POST
- request.COOKIES
- request.META
request.META[‘HTTP_REFERER’]
request.META.get(‘HTTP_REFERER’,’/’)
- get 请求数据
request.GET --> 字典 - post 请求数据
request.POST --> 字典
CSRF验证:
解决方案:
{% csrf_token %}
=====================================================
- 常用成员
- Django中的forms模块
-
forms模块的作用
通过 forms 模块,允许将表单与class相结合
允许通过 class 生成表单 -
使用 forms 模块的步骤
- 在应用中创建 forms.py
- 导入 django 提供的 forms
from django import forms - 创建class,一个class会生成一个表单
class ClassName(forms.Form) - 在 class 中创建属性
一个属性对应到表单中是一个控件
-
forms.Form 的语法
属性 = forms.类型(参数)1. 类型 forms.CharField() : 文本框 <input type="text"> forms.ChoiceField() : 下拉选项框 <select> forms.DateField() : 日期框 <input type="date"> ... ... 3. 参数 1. label 控件前的文本 2. widget 指定小部件 3. initial 控件的初始值(主要针对文本框类型) value=""
-
在模板中解析form对象
-
注意
- 需要自定义
- 表单中的按钮需要自定义
-
解析form对象
在 视图中创建form对象并发送到模板中解析.ex: form = RemarkForm() return render(request,'xx.html',locals())
1.手动解析
{% for field in form %}
field : 表示的是form对象中的每个属性(控件)
{{field.label}} : 表示的是label参数值
{{field}} : 表示的就是控件
{% endfor %}
2.自动解析
1.{{form.as_p}}
将 form 中的每个属性(控件/文本)都使用p标记包裹起来再显示
2.{{form.as_ul}}
将 form 中的每个属性(控件/文本)都使用li标记包裹起来再显示
注意:必须手动提供ol 或 ul 标记
3.{{form.as_table}}
将 form 中的每个属性(控件/文本)都使用tr标记包裹起来再显示
注意:必须手动提供table标记- 练习:
- 创建一个注册Form类 - RegisterForm
uname - 用户名称
upwd - 用户密码(文本框)
uage - 用户年龄(数字框)
uemail - 电子邮箱 - 创建 13-register 路由
get 请求 :
创建 RegisterForm 对象并发送到 13-register.html中显示
post 请求:
接收13-register.html 中的数据并输出
- 创建一个注册Form类 - RegisterForm
- 练习:
-
-
通过 forms 模块获取表单数据
- 通过 forms.Form 子类的构造器来接收 post 数据
form = RemarkForm(request.POST) - 必须是 form 通过验证后,才能取值
form.is_valid()
返回True:通过验证,可以取值
返回False:暂未通过验证,则不能取值 - 通过 form.cleaned_data 属性接收数据
form.cleaned_data : dict 类型
- 通过 forms.Form 子类的构造器来接收 post 数据
-
forms 模块的高级处理
允许将Models实体类和Forms模块结合到一起使用- 在 forms.py 中创建class
继承自forms.ModelForm - 创建内部类Meta,关联Model类
关联信息的属性如下:- model : 指定要关联的实体类
- fields : 指定要从Model中取哪些字段生成控件
- 取值为 “all”
取全部的属性生成控件 - 取值为 列表
将允许生成控件的属性名放在列表中
- 取值为 “all”
- labels : 指定每个属性对应的label值
取值为字典
labels = {
‘属性名’:“label值”
}
- 在 forms.py 中创建class
-
内置小部件 - widget
-
什么是小部件
表示的是生成到网页上的控件以及一些其他的html属性message=forms.CharField(widget=forms.Textarea)
upwd=forms.CharField(widget=forms.PasswordInput) -
常用的小部件类型
1.TextInput: type=‘text’
2.PasswordInput: type=‘password’
3.NumberInput: type=“number”
4.EmailInput: type=“email”
5.URLInput: type=“url”
6.HiddenInput: type=“hidden”
7.CheckboxInput: type=“checkbox”
8.CheckboxSelectMultiple: type=“checkbox”
9.RadioSelect : type=“radio”
10.Textarea :
11.Select:
12.SelectMultiple: -
小部件的使用
- 继承自forms.Form
- 基本版
-
语法
属性 = forms.CharField() #无预选值使用
text,password,email,url,textarea,checkbox
属性 = forms.ChoiceField() #有预选值使用
checkbox,radio,select属性 = forms.CharField(
label=‘xxx’,
widget=forms.小部件类型
) -
示例:
upwd = forms.CharField(
label=‘用户密码’,
widget=forms.PasswordInput
)message = forms.CharField(
label=‘评论内容’,
widget=forms.Textarea
)
-
- 高级版
- 特征
在指定控件类型的基础之上还能指定控件的一些html属性值 - 语法
属性 = forms.CharField(
label=‘xxx’,
widget=forms.小部件类型(
attrs={
‘html属性名’:‘值’,
‘html属性名’:‘值’,
}
)
)
- 特征
- 基本版
- 继承自forms.ModelForm
语法:
class ClassName(forms.ModelForm):
class Meta:
model = xxxx
fields = “all” / ["",""]
labels = {
“xxx”:“xxx”
}
#指定小部件
widgets = {
‘属性名1’:forms.小部件类型,
‘属性名2’:forms.小部件类型(
attrs={
“html属性名”:“值”
}
)
}
- 继承自forms.Form
-
-
- cookies 和 session
- cookies
- 什么是cookies
保存在客户端浏览器上的一段存储空间 - Django中的cookies
使用 响应对象 将cookie保存进客户端- 响应对象
- HttpResponse()
resp = HttpResponse() - render()
resp = render(request,‘xxx.html’,locals()) - redirect()
resp = redirect(’/’)
- HttpResponse()
- 保存cookie
响应对象.set_cookie(key,value,expires)
key:cookie的名字
value:cookie的值
expires:保存时长,以s为单位的数字(s不写) - 获取cookie
request.COOKIES
封装了当前站点下所有的cookie - 字典
- 响应对象
- 什么是cookies
- session
- 什么是session
session - 会话
在服务器上开辟一段空间用于保留浏览器和服务器交互时的重要数据 - 保存 session 的值到服务器
request.session - 字典
request.session[‘KEY’] = VALUE - 获取session的值
VALUE = request.session[‘KEY’] - 删除session的值
del request.session[‘KEY’] - 在 settings.py 中有关session的设置
- SESSION_COOKIE_AGE
作用:指定sessionid在cookies中的保存时长
SESSION_COOKIE_AGE = 60*30 - SESSION_EXPIRE_AT_BROWSER_CLOSE = True
设置只要浏览器关闭时,session就失效
- SESSION_COOKIE_AGE
- 什么是session
- cookies
Django-forms-cookies-session
最新推荐文章于 2022-08-29 11:14:20 发布