CSRF POST 时 需要用户携带随机字符
- Form
- {% csrf_token %}
- Ajax
- data
- cookie 中获取 添加到 headers 中
XSS
- 不用 safe
- mark_safe
- 过滤关键字
cookie
- 放在用户浏览器端的键值对
- 可以放很多 但是对于敏感信息
1、models.AutoField 自增列 int(11)
如果没有的话 默认会生成一个名称为 id 的列 如果要显示的自定义一个自增列 必须将给列设置为主键 primary_key True。
2、models.CharField 字符串字段
必须 max_length 参数
3、models.BooleanField 布尔类型 tinyint(1)
不能为空 Blank True
4、models.ComaSeparatedIntegerField 用逗号分割的数字 varchar
继承CharField 所以必须 max_lenght 参数
5、models.DateField 日期类型 date
对于参数 auto_now True则每次更新都会更新这个时间 auto_now_add 则只是第一次创建添加 之后的更新不再改变。
6、models.DateTimeField 日期类型 datetime
同DateField的参数
7、models.Decimal 十进制小数类型 decimal
必须指定整数位max_digits和小数位decimal_places
8、models.EmailField 字符串类型 正则表达式邮箱 varchar
对字符串进行正则表达式
9、models.FloatField 浮点类型 double
10、models.IntegerField 整形
11、models.BigIntegerField 长整形
integer_field_ranges {
‘SmallIntegerField’: (-32768,32767),
‘IntegerField’: (-2147483648,2147483647),
‘BigIntegerField’: (-9223372036854775808,9223372036854775807),
‘PositiveSmallIntegerField’: (0,32767),
‘PositiveIntegerField’: (0,2147483647),
}
12、models.IPAddressField 字符串类型 ip4正则表达式
13、models.GenericIPAddressField 字符串类型 ip4和ip6是可选的
参数protocol可以是 both、ipv4、ipv6
验证时 会根据设置报错
14、models.NullBooleanField 允许为空的布尔类型
15、models.PositiveIntegerFiel 正Integer
16、models.PositiveSmallIntegerField 正smallInteger
17、models.SlugField 减号、下划线、字母、数字
18、models.SmallIntegerField 数字
数据库中的字段有 tinyint、smallint、int、bigint
19、models.TextField 字符串 longtext
20、models.TimeField 时间 HH:MM[:ss[.uuuuuu]]
21、models.URLField 字符串 地址正则表达式
22、models.BinaryField 二进制
23、models.ImageField图片
24、models.FilePathField文件
通过写 models.UserInfo.objects.create(...) 操作不会有影响 通过 Django 自带管理工具 admin 有影响
Email 示例创建一个含有 EmailField 的类
class UserInfo(models.Model): username models.CharField(max_length 32) email models.EmailField()
终端创建超级用户
在 admin.py 中进行注册
from django.contrib import admin from app01 import models admin.site.register(models.UserInfo)
登录 admin 可以看到这些类
增加一个 UserInfo 对象 若输入错误的格式 会有错误提示
ctime models.DateTimeField(null True)枚举示例 应用场景 选项固定不变 ForeignKey 用于选项能够动态变化时
color_list ( (1, 红色 ), (2, 白色 ), (3, 蓝色 ) color models.IntegerField(choices color_list)
以数字标号形式方便存储在数据库 可以拿取文字部分数据 在 admin 中则会直接展现
索引
email models.EmailField(null True, default 111 , db_index True, unique True)
唯一联合索引
class meta: unique_together [ ( b , g ),
不唯一联合索引
class meta: index_together [ ( b , g ),针对 admin
blank True (可以输入为空
verbose_name ‘xxx’ 显示字段名称
editable 是否可以编辑
help_text 提示信息
choices [{0, ‘a’}, {1, ‘b’},], default 1
error_messages 修改错误信息 优先级较低
test models.CharField(
max_length 32,
error_messages {
c1 : 优先错信息1 ,
c2 : 优先错信息2 ,
c3 : 优先错信息3 ,
validators [
RegexValidator(regex root_d , message 错误了 , code c1 ),
RegexValidator(regex root_112233d , message 又错误了 , code c2 ),
EmailValidator(message 又错误了 , code c3 ), ]
模板
函数- 自动执行
传入函数 自动执行
return render(request, test.html , { userinfo : { k1 : v1 , k2 : v2 }})
前端写法
body
h1 打印所有key /h1
{% for item in userinfo %}
h3 {{ item }} /h3
{% endfor %}
/body
k1
k2
body
h1 打印所有key /h1
{% for item in userinfo.values %}
h3 {{ item }} /h3
{% endfor %}
/body
v1
v2
body
h1 打印所有key /h1
{% for item in userinfo.items %}
h3 {{ item }} /h3
{% endfor %}
/body
(‘k1’, ‘v1’)
(‘k2’, ‘v2’)
body
h1 打印所有key /h1
{% for k, v in userinfo.items %}
h3 {{ k }}-{{ v }} /h3
{% endfor %}
/body
k1-v1
k2-v2
传入函数 给出函数名 不加括号 不能加参数 自动执行。
模板自定义函数 filter在 html 文件中使用 {{ item | upper }} 会自动调用装饰器 显示为大写字母。
自己写
在 app01 下创建文件夹 templatetags 创建文件 xx.py
from django import template register template.Library() register.filter def my_upper(value): return value.upper()
html 文件开头加上 {% load xx %} 即可调用 my_upper。
支持 最多 两个参数
register.filter def my_upper(value, arg1): return value.upper() arg1
前端
{{ name | my_upper: 666 }}
666 即为第二个参数 冒号后不能有空格。
simple_tagregister.simple_tag def my_lower(value): return value.lower()
应用
h1 tag /h1
{% my_lower ALEX %}
可以接受多个参数
register.simple_tag def my_lower(value, a1, a2, a3): return value.lower() a1 a2 a3
应用
{% my_lower ALEX A B C %}
小结
filter 可以使用条件语句 tag 可以接收多个参数。
filter {{ 第一个参数 | 函数名称:“第二个参数” }}
tag {% 函数名 参数 参数 %}
pub.html
div
...{{ name }}
/div
导入组件
{% include pub.html %}
Session
Session 是什么
cookie 是什么
保存在客户端浏览器上的键值对
Session是什么
保存在服务器端的数据 本质是键值对
{
“rkgssrlgnlr”:{‘id’:1, ‘name’:‘于浩’, …}
}
应用 依赖 cookie
作用 保持会话 Web 网站
好处 敏感信息不会直接给客户端
例子
def login(request):
if request.method GET :
return render(request, login.html )
else:
u request.POST.get( user )
p request.POST.get( pwd )
if u root and p 123 :
# 1. 生成随机字符串
# 2. 通过cookie发送给客户端
# 3. 服务端保存{ 随机字符串1 { xxx ...} }
request.session[ username ] alex
request.session[ email ] alex123 qq.com
return redirect( /index/ )
else:
return render(request, login.html , { msg : 用户名或密码错误 })


