author认证模块
author认证模块
用auth模块 你就用全套 不是自己写一部分 用别人一部分
创建超级管理员,用于登录DJango admin的后台管理
命令:createsuperuser,输入顺序用户名》邮箱》密码》确认密码。
注意:所有密码一定要设为为密文
登录实例:
views.py
from django.shortcuts import render
# Create your views here.
from django.contrib import auth
from django.contrib.auth.models import User
def login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user_obj = auth.authenticate(username=username,password=password)
if user_obj:
print(user_obj)
print(user_obj.username)
print(user_obj.password)
auth.login(request,user_obj) # 执行完这一句只要能够拿到request的地方都可以通过request.user获取当前登录用户对象
"""该方法会主动帮你操作session表 并且只要执行了该方法
你就可以在任何位置通过request.user获取到当前登录的用户对象
"""
return render(request,'login.html')
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<link href="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script>
</head>
<body>
<form action="" method="post">
{% csrf_token %}
<p>username:<input type="text" name="username"></p>
<p>password:<input type="text" name="password"></p>
<input type="submit">
</form>
</body>
</html>
该方法会有一个返回值 当条件存在的情况下 返回就是数据对象本身条件不满足 直接返回None
,返回密码为密文
pbkdf2_sha256$36000$BcE7QVE95n4A$55xwX93B60dEIqKJcXd24+VoEVY4d0CtaTPkwmSDMhc=。
变化:
验证auth.login(request,user_obj)
为了方便,节省代码量。我们需要使用全局配置,在settings:
# auth校验用户是否登录 全局配置跳转url
LOGIN_URL = '/login/'
效果可以删除django_session中的数据,重新登录
修改密码:
views.py
# 继承上边代码
from django.contrib.auth.decorators import login_required
@login_required
def set_password(request):
if request.method == 'POST':
old_password = request.POST.get('old_password')
new_password = request.POST.get('new_password')
# 校验原密码对不对
is_right = request.user.check_password(old_password)
print(is_right)
if is_right:
# 修改密码
request.user.set_password(new_password) # 仅仅只会在内存中产生一个缓存 并不会直接修改数据库
request.user.save() # 一定要点save方法保存 才能真正的操作数据库
return redirect('/login/')
return render(request,'set_password.html',locals())
set_password.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<link href="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script>
</head>
<body>
<form action="" method="post">
{% csrf_token %}
<p>username<input type="text" disabled value="{{ request.user.username }}"></p>
<p><input type="text" name="old_password"></p>
<p><input type="text" name="new_password"></p>
<input type="submit">
</form>
</body>
</html>
注册功能演示:
views.py
def register(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
# models.User.objects.create(username=username,password=password)
# User.objects.create(username=username,password=password) # 不用使用create 密码会直接存成明文
# User.objects.create_user(username=username,password=password) # 创建普通用户
User.objects.create_superuser(username=username,password=password,email='123@qq.com') # 创建超级用户 邮箱字段必须填写
#
return render(request,'register.html')
register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<link href="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script>
</head>
<body>
<form action="" method="post">
{% csrf_token %}
<p>username:<input type="text" name="username"></p>
<p>password:<input type="text" name="password"></p>
<input type="submit">
</form>
</body>
</html>
扩展auth_user字段
利用一对一表关系,扩展字段
自己写一个默写类,继承原来的auth_user类,然后在settings配置文中告诉Django使用新建的类代替原来的auth_user 表,因为已经创建完模型库,所以只能换库或者换项目。
这里更换成MySQL数据库
建表:
models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here. class Userinfo(AbstractUser):
"""
强调 你继承了AbstractUser之后 你自定义的表中 字段不能跟原有的冲突
"""
phone = models.BigIntegerField()
avatar = models.FileField()
register_time = models.DateField(auto_now_add=True)
一定要在settings 中指定
# auth自定义表配置
AUTH_USER_MODEL = 'app01.Userinfo'
# 固定语法: AUTH_USER_MODEL = '应用名.表名'
通过上边的方式继承的表,还是可以继续使用auth模块所有的功能
基于中间件 参考源码 设计自己的功能可插拔式设计
总结:类似于Django中的settings文件,舍弃大量的局部配置文件,该用全局配置文件。
author认证模块的更多相关文章
- Java结合SpringBoot拦截器实现简单的登录认证模块
Java结合SpringBoot拦截器实现简单的登录认证模块 之前在做项目时需要实现一个简单的登录认证的功能,就寻思着使用Spring Boot的拦截器来实现,在此记录一下我的整个实现过程,源码见文章 ...
- auth 认证模块
. auth认证模块: http://www.cnblogs.com/liwenzhou/p/9030211.html auth模块的知识点: . 创建超级用户 python manage.py cr ...
- Linux-PAM认证模块
Linux-PAM认证模块 用户访问服务器的时候,服务器的某一个服务程序把用户的谁请求发送到PAM模块进行认证.对于不同的服务器应用程序所对应的PAM模块也是不同的.如果想查看某个程序是否支持 ...
- Laravel认证模块开发
菜鸟学Laravel(二) Laravel认证模块开发 laravel内部已经做好了一个简单的登录模块,我们可以用如下命令来生成: 1 php artisan make:auth 我们查看一下路由 ...
- Django进阶-auth集成认证模块
auth认证模块是Django内置集成的一个用户认证模块. auth认证模块方法 方法 释义 auth.authenticate() 认证校验 auth.login(request,user) 封装认 ...
- (30)auth模块(django自带的用户认证模块)
Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的 ...
- Django之auth模块用户认证模块
一.Auth模块 1)auth模块是什么.登录后台使用的账号密码,则就是使用的auth模块创建的表 Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站 ...
- django-auth认证模块
########django-auth认证模块######## auth模块:它是django自带的用户认证模块,帮我们解决了登陆,注册,注销,修改密码 等等一系列的操作,封装成一个个方法,方便我们使 ...
- django CBV装饰器 自定义django中间件 csrf跨站请求伪造 auth认证模块
CBV加装饰器 第一种 @method_decorator(装饰器) 加在get上 第二种 @method_decorator(login_auth,name='get') 加在类上 第三种 @met ...
随机推荐
- Selenium 元素常用操作方法(键盘和鼠标事件)
一.简单操作 click():点击 send_keys():输入 clear():清空 submit():提交表单 size:返回元素的尺寸 text:获取元素的文本 get_attribute(): ...
- Springboot(八):emoji表情保存到mysql出错的解决办法
emoji表情保存到mysql出错的解决办法 今天,在前端的说明信息中输入emoji表情的时候,插入数据库会报错 百度了一下,是因为mysql数据库的字符编码集不正确,utf8无法存入表情字符,只能将 ...
- 不知道Java类文件结构的同学,看这篇文章就够了
一.前言 代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步.经过多年的发展,目前的计算机仍然只能识别0和1,但是由于近10年内虚拟机以及大量建立在虚拟机之上的程 ...
- 如何解决两个相邻的span中间有空隙
span中间不要有换行.或者空格 或者在样式上加上float:left
- SQL Server标量函数改写内联表值函数优化案例
问题SQL: SELECT TOP 1001 ha.HuntApplicationID , ha.PartyNumber , mht.Name AS MasterHuntTypeName , htly ...
- 多网卡情况下接收udp组播
多网卡下接收udp组播 往往会接收失败 因为用错了网卡 例如我想要接收2网段 其他电脑出的udp组播 我电脑有有线网和wifi在window下可以这样 route add 230.0.0.1 mas ...
- 学习Linux的基础网站
http://c.biancheng.net/view/726.html
- Linux下编译安装Python-3.6.5
1.下载Python-3.6.5安装包 在Python官网(https://www.python.org/downloads/)下载对应的安装包,选择3.6.5的linux版本,如下图: 2.将安装包 ...
- multiple datasource config
Hi Harshit S. project structure: multiple datasource config as follows: step 1: step 2:add a datasou ...
- 【Python】我的第一个豆瓣短评爬虫
写在开头 豆瓣上有着大量的影视剧的评论,所以说,要是想要实现对广大人民群众的观点的分析,对一部片子的理解,综合来看大家的评论是很有必要的.而短评作为短小精干的快速评论入口,是值得一谈的. 所以先要实现 ...