Django框架4(django admin的简单用户+form&model form+auth模块)

有效性1.今日内容
1. form和model form:https://www.cnblogs.com/liwenzhou/p/8747872.html
一. Django Admin的简单用法:
1. 创建管理员账号
python3 manage.py createsuperuser


2. 在admin注册我们的表
在app目录下面的admin.py里面按以下语法注册
admin.site.register(models.类名)
3. 其他配置项
(1). admin页面显示中文
settings.py中修改LANGUAGE_CODE = 'zh-hans'

 


(2). 表名显示中文
类下面写如下配置项
class Meta:
verbose_name = "出版社"
verbose_name_plural = verbose_name
(3). 字段显示中文
address = models.TextField(verbose_name="出版社地址")

 

补充知识点:使用这个,可以直接执行makemigrations的

 补充知识点2:blank=True和null=True一般是一起使用的。null=True是控制数据库中这个字段可以不填,blank=True是控制页面上的对应字段可以不填。

 


二、 form
1. form的作用
(1). 生成HTML代码
(2). 帮我们做数据有效性的校验
(3). 保留上次输入内容,显示错误提示

2. form组件生成html代码

3. form组件校验数据有效性
(1). 内置的校验规则
1. require=True 该字段必填
2. max_length 该字段的最大长度
3. min_length 该字段的最小长度

(2). 自定义校验规则
1. phone的格式 利用内置的正则校验器
from django.core.validators import RegexValidator
validators=[RegexValidator(r'^1[356789]\d{9}$', "手机号码格式不正确")],
2. 手机号的唯一性校验
手写一个校验函数

三、 使用钩子函数做校验
1. 局部钩子(hook)
在form类内部定义一个 clean_字段名() 方法

2. 全局钩子
在form类内部定义一个 clean() 方法
四、 form组合如何给html标签设置默认值
1. 每一个字段设置默认值
initial="默认值"
3. model form
1. 必须继承forms.ModelForm

2. class Meta:
model = "一对一关联的model类名"
fields = "__all__"
3. 实例化
(1). BookModelForm(instance=book_obj)
(2). BookModelForm(request.POST, instance=book_obj)
4. form_obj.save()

总结点:创建和编辑(更新)表中数据

 


五、 auth模块+报障系统(BBS) :https://www.cnblogs.com/liwenzhou/p/9030211.html
1. 设计一套用户认证系统
(1). 设计表
(2). 登陆
(3). 注册
(4). 个人中心那些
(5). 验证码
(6). 登陆认证
2. auth模块的常用方法
(1). authenticate()
(2). login()
(3). create_user()
(4). create_superuser()
(5). logout()
(6). check_password()
(7). set_password()
3. 扩展默认的auth_user表
默认auth模块使用的是auth_user表,不满足实际需求
(1). 必须继承AbstractUser
from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
phone = models.CharField(max_length=11)
(2). 告诉Django使用我们的用户表代替auth_user表
1. 登陆
1. 验证码
1. 自己生成验证码
1. pillow模块的使用
1. pip install pillow
2. 生成图片
3. 在图片上写字符
4. 在图片上画线
2. 内存操作
from io import BytesIO
f1 = BytesIO()
3. 验证码保存在哪里?
保存在session中,因为每个请求验证码都不同。
4. 点击验证码图片刷新
2. 滑动验证码
极验科技:https://docs.geetest.com/install/deploy/server/python

 

 

总结:

知识点1:登录过的,打印用户的名字和用户类型

知识点2:

知识点3:locals()这个相当于一个字典{"request":request,"data":data}

def book_list(request):
data = models.Book.objects.all()
# return render(request, "book_list.html", {"data": data})
# locals()以字典的形式把当前作用域的变量表示出来
return render(request, "book_list.html", locals())

知识点4:authors是得到一个list,所以用getlist,如果使用get的话,就会拿到的是最后一个

 

 知识点5:这块拿到的是一个id值

 

 

知识点6:数据表中已经有数据了,如果再给这个数据库加一个字段,更新数据库表的时候会出现如下提示,一般选择2退出,给这个新增字段加一个默认值,或者写可以为空。不写默认不可以为空。

知识点7:values_list得到的是一个个元祖,返回一个QuerySet,里面是元祖

 知识点8、数据有效性校验

知识点9、next_url=request.GET.get("next","/index/"),使用get的时候,第二个值是默认值,是指当get获取不到值的时候,next_url="/index/";如果没有默认值,获取不到的时候会报错。这样一写,return redirct(next_url)这样就不用判断next_url是不是有值的。

 

posted @ 2018-08-26 23:27  信、达、雅  阅读(268)  评论(0编辑  收藏  举报