Django认证系统auth认证
使用Django认证系统auth认证
auth认证系统可以处理范围非常广泛的任务,且具有一套细致的密码和权限实现。对于需要与默认配置不同需求的项目,Django支持扩展和自定义认证;会将用户信息写入到 auth_user 表中;
User对象
User对象是认证系统的核心。它们通常表示与你的站点进行交互的用户,并用于启用限制访问、注册用户信息和给创建者关联内容等。在Django的认证框架中只存在一种类型的用户,因此诸如'superusers'或管理员'staff'用户只是具有特殊属性集的user对象,而不是不同类型的user对象。
默认user的基本属性有:
username 必选。少于等于30个字符。 用户名可以包含字母、数字、_、@、+、.和- 字符。
password 必选。 密码的哈希及元数据。(Django 不保存原始密码)。原始密码可以无限长而且可以包含任意字符。
email 可选。邮箱地址。
first_name 可选。 少于等于30个字符。
last_name 可选。少于30个字符。
is_superuser 可选。布尔值。指定这个用户拥有所有的权限而不需要给他们分配明确的权限。1为super 0 为普通用户。
last_login 无需设置。用户最后一次登录的时间。自动记录。
is_staff 可选。布尔值。指示用户是否可以访问Admin 站点。
is_active 可选。布尔值。指示用户的账号是否激活。 1为激活 0 为未激活(未激活用户不可登陆)。
date_joined 无需设置。账户创建的时间。当账号创建时,默认设置为当前的date/time。
创建用户users
1.创建users最直接的方法是使用create_user()辅助函数:
from django.contrib.auth.models import User
user = User.objects.create_user('zhangsan', 'zhangsan@qq.com', 'zhangsanpassword')
# 此时已经保存用户对象到数据库,可以继续更改其属性,如果你想改变其他领域。
user.last_name = 'Li'
user.save()
创建superusers
1.使用createsuperuser命令创建superusers:
D:\file_Djang\auth>python manage.py createsuperuser --username=baolin --email=baolin@gmail.com
# 将会提示你输入一个密码。在你输入一个密码后,该user将会立即创建。如果不带--username和--email选项,将会提示你输入这些值。
修改密码
Django不会在user模型上存储原始的(明文)密码,而只是一个哈希值。因此不要尝试直接操作user的password属性,修改密码;
1.修改密码方法一:changepassword username
# 密码必须包含至少8个字符。
D:\file_Djang\auth>python manage.py changepassword zhangsan
Changing password for user 'zhangsan'
Password:
Password (again):
Password changed successfully for user 'zhangsan'
2.通过程序修改密码,使用set_password()
from django.contrib.auth.models import User
u = User.objects.get(username='zhangsan')
u.set_password("zhangsan123")
u.save()
认证Users
使用authenticate(),认证一组给定的用户名和密码。它接收关键字参数形式的凭证,使用默认配置时参数是username和password,如果密码能够匹配给定的用户名,它将返回一个User对象。如果密码无效,authenticate()返回None。
1.urls.py
from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^login/', views.login),
url(r'^index/', views.index),
url(r'^logout/', views.log_out),
url(r'^reg/', views.reg),
url(r'^set_pwd/', views.set_pwd),
]
2.获取前端login.html传入得用户密码,判断用户验证是否正确,正确跳转到index页面,否则跳转到登陆页面;
from django.shortcuts import render, redirect, HttpResponse
from django.contrib import auth
from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required
def login(request):
if request.method == "POST":
username = request.POST.get("user")
password = request.POST.get("pwd")
# 直接通过 authenticate 可以直接调用 auth_user 表中的用户进行验证
# 验证成功,就会有返回值,否则返回None
user = auth.authenticate(username=username, password=password)
if user:
# 匹配给 session 绑定相应的值 user
auth.login(request, user)
return redirect("/index/")
else:
# 不成功重定向到 login 页面
return redirect("/login/")
return render(request, "login.html")
# 使用Django自带得装饰器login_required 实现验证
@login_required(login_url='/login/')
def index(request):
# 如不使用 @login_required 装饰器 认证,可以直接通过if 判断request.user.is_authenticated 是否有值
# if not request.user.is_authenticated():
# return redirect("/login/")
return render(request, "index.html")
# auth 提供的 用户注销 auth.logout(request)
def log_out(request):
# auth 提供的 用户注销
auth.logout(request)
return redirect("/login/")
# 添加用户(可以判断如果是超级用户,允许创建用户)
@login_required(login_url="/login/")
def reg(request):
if request.method == "POST":
username = request.POST.get("user")
password = request.POST.get("pwd")
# auth 提供的 向 auth.user 表写入用户信息的方法
User.objects.create_user(username=username, password=password)
return redirect("/index/")
return render(request, "reg.html")
# 修改密码
@login_required(login_url="/login/")
def set_pwd(request):
if request.method == "POST":
pwd = request.POST.get("pwd")
# pwd1 = request.POST.get("pwd1")
username = request.user
print(username,pwd)
# 修改密码 需要 分开写,最后save()报错结果
u = User.objects.get(username=username)
u.set_password(pwd)
u.save()
return redirect("/login/")
return render(request,"set_pwd.html")
3.前端html设置:
###############index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!-- 自行引入 Bootstrap 核心 组件 文件 -->
</head>
<body>
<nav class="navbar navbar-inverse">
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav navbar-right">
{# request.user 可以直接获取用 当前认证的用户 #}
<li><a href="#">{{ request.user }}</a></li>
<li><a href="/logout/">注销</a></li>
<li><a href="/reg/">添加用户</a></li>
</ul>
</div><!-- /.navbar-collapse -->
</nav>
</body>
</html>
###############login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/login/" method="post">
{% csrf_token %}
<p>姓名:<input name="user" type="text"></p>
<p>密码:<input name="pwd" type="text"></p>
<input type="submit">
</form>
</body>
</html>
###############reg.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>注册页面</h2>
<form action="/reg/" method="post">
{% csrf_token %}
<p>姓名:<input name="user" type="text"></p>
<p>密码:<input name="pwd" type="text"></p>
<input type="submit">
</form>
</body>
</html>
###############set_pwd.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>修改密码:{{ request.user }} 用户</h2>
<form action="/set_pwd/" method="post">
{% csrf_token %}
<p>密码:<input name="pwd" type="text"></p>
{#<p>确认密码:<input name="pwd2" type="text"></p>#}
<input type="submit">
</form>
</body>
</html>
Django认证系统auth认证的更多相关文章
- Django之自带的认证系统 auth模块
01-Django自带的用户认证 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Dj ...
- Django的认证系统—auth模块
Django的认证系统 auth模块的知识点总结: 1. 创建超级用户 python manage.py createsuperuser from django.contrib import auth ...
- Django的认证系统 auth模块
Django自带的用户认证 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Djang ...
- 『Django』第N+1节: Django自带的认证系统 - auth
个人网站: lipeiguan.top 以后会慢慢转移到个人网站, 欢迎大家收藏^ . ^ 写在前面 我们在开发一个网站的时候, 经常需要实现网站的用户系统. 这个时候我们需要实现用户注册.用户登录. ...
- django框架进阶-auth认证系统-长期维护
################## django的认证系统 ####################### 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要 ...
- Django的自带认证系统——auth模块
Django自带的用户认证 auth模块 from django.contrib import auth 备注:使用auth模块时,我们默认使用Django提供的auth_user表,创建数据时,可以 ...
- django中间件 csrf auth认证
django中间件 能做全局访问频率限制,身份校验,黑名单,白名单 用法: 新建一个文件夹,文件夹新建一个py文件,文件中写如下代码 注意点:你写的类必须继续MiddlewareMixin from ...
- django用户认证系统——自定义认证后台8
Django auth 应用默认支持用户名(username)进行登录.但是在实践中,网站可能还需要邮箱.手机号.身份证号等进行登录,这就需要我们自己写一个认证后台,用于验证用户输入的用户信息是否正确 ...
- Django中间件、Auth认证
中间件 一:什么是中间件 是介于request与response处理之间的一道处理过程 二:中间件的作用 如果你想修改请求,例如被传送到view中的HttpRequest对象. 或者你想修改view返 ...
随机推荐
- “指定的参数已超出有效值的范围”在【 parameterUpdate.Add(new OracleParameter("STATUS", 0));】报错
改成:parameterUpdate.Add()); 就不报错,并不能知道为什么,有知道为什么的,评论告诉我. /// <summary> /// 插入数据 /// </summar ...
- SQL Server - 哈希索引
转载自:https://blog.csdn.net/josjiang1/article/details/80637076 作者:josjiang1 ————————总结———————— 使用场景: 1 ...
- SpringCloud概述
⒈官网说明 SpringCloud是基于SpringBoot提供了一套微服务解决方案,包括服务注册与发现.配置中心.全链路监控.服务网关.负载均衡.熔断器等组件,除了基于Netflix的开源组件做高度 ...
- 2018 Multi-University Training Contest 9 杭电多校第九场 (有坑待补)
咕咕咕了太久 多校博客直接从第三场跳到了第九场orz 见谅见谅(会补的!) 明明最后看下来是dp场 但是硬生生被我们做成了组合数专场…… 听说jls把我们用组合数做的题都用dp来了遍 这里只放了用组 ...
- 题解-洛谷4921&4931 情侣?给我烧了!(加不加强无所谓版)
Problem 简单版 & 加强版 题目概要(其实题面写得很清楚,这里搬运一下): \(n\) 对情侣排座位,恰有 \(n\) 排座位,每排 \(2\) 个座位,在一个就座方案中所有人会将将座 ...
- c#基础之异常处理
在开发过程中,经常遇到各种各样的小问题,很多是由于基础不牢固,没有经常总结导致的.遇到重复的问题可能可根据以往经验处理,但是对问题本身引发的原因进行深入的了解.工作很多年,但是c#基础像一层冰一样,可 ...
- 【转】线程join()方法的含义
在很多情况下,主线程生成并启动了子线程,如果子线程里要进行大量的耗时运算,主线程往往将于子线程之前结束,但是如果主线程处理完其它事务后,需要用到子线程的处理结果,也就是主线程需要等待子线程执行完成之后 ...
- zTree:一个依靠 jQuery 实现的多功能 “树插件”
官方网站: http://www.treejs.cn/v3/main.php#_zTreeInfo 使用方式: 步骤1.文件准备 将需要使用的 zTree v3.x 相关的 js.css.img 文件 ...
- K-query SPOJ - KQUERY 离线 线段树/树状数组 区间大于K的个数
题意: 给一个数列,一些询问,问你区间$[l.r]$大于$K$的个数 题解: 又一个"人尽皆知傻逼题"? 我们用一个01序列表示当前询问时,该位置的数字是否对答案有贡献, 显然,对 ...
- DALSA相机开发--修改参数
DALSA gige相机有两种方式可以获取到相机相关参数,一个是读取相机里面的xml文件:另外一个是读取相对应的寄存器的值. 对于修改寄存器的值,有两个相应的函数: 1)GevSetFeatureVa ...