栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Django入门到放弃 学习笔记 07

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Django入门到放弃 学习笔记 07

上节回顾

CSRF POST 时 需要用户携带随机字符
  - Form
    - {% csrf_token %}
  - Ajax
    - data
    - cookie 中获取 添加到 headers 中

XSS
  - 不用 safe
  - mark_safe
  - 过滤关键字

cookie
  - 放在用户浏览器端的键值对
  - 可以放很多 但是对于敏感信息

ORM 操作补充 可选字段

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_tag
 register.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 {% 函数名 参数 参数 %}

组件 include

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 : 用户名或密码错误 })
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/267060.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号