python全栈开发day73-Django认证系统
一、Form组件
- day73 2018-08-10
- 1. 内容回顾
- 1. form表单组件
- 1. 常用字段
- 1. CharField()
- 2. ChoiceField()
- 2. 参数或配置
- 1. label="label标签显示的文本内容"
- 2. initial="默认值"
- 3. widget=forms.widgets.TextInput() --> <input typle='text'/>
- widget=forms.widgets.PasswordInput(
- attrs={"class": "c1", "s12": "hao"}
- )
- 4. required=False --> is_valid()校验的时候该字段没有值也不报错
- 5. error_messages={"required": "xx字段不能为空", "max_length": "xx字段最多不能超过位数"}
- 6. max_length
- 7. min_length
- 8. validators=[验证器1,验证器2, ...]
- 3. 验证器
- 1. 内置正则验证
- from django.core.validators import RegexValidator
- validators=[RegexValidator(r'^1[3-9]\d{9}$', "手机号码格式不正确!"), ]
- 2. 自定义方法实现
- from django.core.exceptions import ValidationError
- # 自定义校验的方法
- def name_check(value):
- if 'jinpingmei' in value:
- raise ValidationError("不符合社会主义核心价值观!")
- else:
- return value
- validators=[name_check, ],
- 4. 钩子函数
- 0. self.cleaned_data --> 用来存放经过验证数据的大字典
- self.add_error("字段名", "错误提示信息")
- 1. 局部钩子(Hook)
- 通过自定义一个clean_字段名的方法实现字段的校验
- 2. 全局钩子
- 此时 每个字段独立的校验都走完了,cleaned_data中已经存放着所有字段的数据
- def clean(self):
- print("我可是看过源码的人,我知道你肯定会执行这个方法!")
- # 重写父类的clean方法
- # 该clean方法, 在每个字段都校验通过之后才调用执行
- pwd = self.cleaned_data.get("pwd")
- re_pwd = self.cleaned_data.get("re_pwd")
- if re_pwd and re_pwd == pwd:
- # 确认密码和密码相同, 正常
- return self.cleaned_data
- else:
- # 确认密码和密码不同
- self.add_error('re_pwd', "两次密码不一致") # ?
- raise ValidationError("两次密码不一致")
- 2. 今日内容
- 1. auth认证
- 默认Django内置的认证系统, 默认在数据库中使用auth_user
- from django.contrib import auth
- 1. 创建一个超级用户
- python manage.py createsuperuser
- 2. 验证用户名和密码是否正确
- user = auth.authenticate(request, username, password)
- 3. 登录
- auth.login(request, user) --> user是上一步的得到的user对象
- 4. 注销
- auth.logout(request) --> 将当前请求的session数据删除
- 5. 登录认证的装饰器
- auth.decorators.login_required
- 默认跳转的登录url: /accounts/login/
- 在settings.py中 配置 LOGIN_URL = "你的登录url"
- 6. is_authenticated()
- 判断当前request.user是否经过认证,经过认证就返回True,否则是False
- 7. AuthenticationMiddleware中间件究竟做了什么?
- request.user = user, 匿名用户对象
- 8. create_user()
- 9. create_superuser()
- 10. check_password()
- 11. set_password()
- 2. 扩展默认的auth_user表:
- from django.contrib.auth.models import AbstractUser
- class UserInfo(AbstractUser):
- # 扩展auth模块默认的数据表
- phone = models.CharField(max_length=11)
- 注意事项:
- 1. 告诉Django使用我的UserInfo表来做用户的管理
- 在settings.py中配置:
- AUTH_USER_MODEL = "app名.UserInfo"
- 3. BBS/CMS
- 1. 需求分析
- 1. 登录注册、注销
- 2. 文章分页
- 3. 评论
- 4. 点赞
- 5. 发帖
- 6. 查看文章
- 7. 博客站点主题自定制
- 8. 博客应该有分类
- 2. 表结构设计
- 1. 用户表
- 2. 文章表
- 3. 评论 多对一关联文章
- 4. 点赞/反对 多对一关联文章 一个用户只能对一篇文章点赞一次
- 5. 博客主题表 存的每个博主的主题css文件
- 6. 文章分类表 一对多关联文章
- 7. 文章标签表 多对多关联文章表
- 每个组 设计一套models.py ,最迟周日的晚上8:00之前发到我QQ邮箱
- 3. 今日任务
- 1. 好好玩,调整状态 准备进入项目阶段
- 4. 周末任务
- 1. authBlog整理一下
- 2. 自己在课上注册登录的例子基础上实现一个用户修改密码的功能
- 1. 登录的用户才能修改密码
- 2. 修改密码之前先校验原密码是否正确
- 3. 加上Bootstrao样式
- 3. 设计BBS项目表结构
- 4. 复习jQuery和form,周一要用!!!
Django Form组件
二、Django认证系统
http://wuchengyi.com/post/16/
https://www.cnblogs.com/liwenzhou/p/9030211.html
python全栈开发day73-Django认证系统的更多相关文章
- Python全栈开发:django网络框架(一)
Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...
- python 全栈开发,Day120(路由系统, 实例化Flask的参数, 蓝图(BluePrint), before_request after_request)
昨日内容回顾 1.Flask: from flask import Flask app = Flask(__name__) # 从源码中可以看出,Flask集成的run方法是由werkzeug中的ru ...
- Python全栈开发:django网络框架(二)
Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行 ...
- python全栈开发_day17_时间,系统模板和序列化
一:时间模板 1)time 常用功能: time.sleep() time.time() time.strftime() import time print(time.strftime("% ...
- python全栈开发学习_内容目录及链接
python全栈开发学习_day1_计算机五大组成部分及操作系统 python全栈开发学习_day2_语言种类及变量 python全栈开发_day3_数据类型,输入输出及运算符 python全栈开发_ ...
- python 全栈开发,Day99(作业讲解,DRF版本,DRF分页,DRF序列化进阶)
昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...
- python全栈开发中级班全程笔记(第二模块、第四章)(常用模块导入)
python全栈开发笔记第二模块 第四章 :常用模块(第二部分) 一.os 模块的 详解 1.os.getcwd() :得到当前工作目录,即当前python解释器所在目录路径 impor ...
- Python 全栈开发【第0篇】:目录
Python 全栈开发[第0篇]:目录 第一阶段:Python 开发入门 Python 全栈开发[第一篇]:计算机原理&Linux系统入门 Python 全栈开发[第二篇]:Python基 ...
- Python全栈开发【面向对象】
Python全栈开发[面向对象] 本节内容: 三大编程范式 面向对象设计与面向对象编程 类和对象 静态属性.类方法.静态方法 类组合 继承 多态 封装 三大编程范式 三大编程范式: 1.面向过程编程 ...
- Python全栈开发【模块】
Python全栈开发[模块] 本节内容: 模块介绍 time random os sys json & picle shelve XML hashlib ConfigParser loggin ...
随机推荐
- C/C++中如何在main()函数之前执行一条语句?
在C语言中,如果使用GCC的话,可以通过attribute关键字声明constructor和destructor(C语言中如何在main函数开始前执行函数) #include <stdio.h& ...
- ASP.NET MVC5高级编程 之 Ajax
jQuery不仅支持所有现代浏览器,包括IE.Firefox.Safari.Opera和Chrome等,还可以在编写代码和浏览器API冲突时隐藏不一致性(和错误). 1. jQuery jQuery擅 ...
- jetty去掉项目名称访问
对于web项目,访问路径是否包含项目名称等修改访问路径的配置方式: 我所使用的是maven进行管理,只需要在pom.xml中进行如下配置 <!-- jetty插件 jetty:run--> ...
- Git操作----删除untracked files
# 删除 untracked files git clean -f # 连 untracked 的目录也一起删掉 git clean -fd # 连 gitignore 的untrack 文件/目录也 ...
- VUE 图片验证码
1. 概述 1.1 说明 在开发过程中,有时候需要使用图片验证码进行增加安全强度,在点击图片时更新新的图片验证码,记录此功能,以便后期使用. 2. 示例 2.1 vue示例代码 <templat ...
- Vue项目构建开发笔记(vue-lic3.0构建的)
1.router.js里面 { path: '/about', name: 'about', // route level code-splitting // this generates a sep ...
- Struts2框架的概述及学习重点
什么是Struts2的框架 * Struts2是Struts1的下一代产品,是在 struts1和WebWork的技术基础上进行了合并的全新的Struts 2框架. * 其全新的Struts 2的体系 ...
- Confluence 6 用户宏最佳实践
这个页面为你在创建用户宏的最佳实践中包含了一些小技巧和建议. 为你的宏添加一个简短的描述 我们鼓励你为你的宏在 模板(Template )添加一个备注的描述,可以参考下面的显示的内容: ## Macr ...
- Swift可选项
- mongodb基类封装实例
mongodb的基类 1 <?php 2 3 namespace BI\Service\MongoDB; 4 5 use MongoDB\Driver\BulkWrite; 6 use Mong ...