from django.contrib import auth

1.authenticate()

提供了用户认证,即验证用户名以及密码是否正确,一般需要username和password两个关键字参数

如果通过认证,authenticate()函数会返回一个User对象,没通过返回None

user=authenticate(username="uaername",password="password"

2.login(request)登陆用户

这个函数使用Djangosession框架给某个已认证的用户附加上session_id信息。

使用:

    from django.shortcuts import render,redirect,HttpResponse

    from django.contrib.auth import authenticate,login

    def auth_view(request):
username=request.POST.GET("usernmae") # 获取用户名
password=request.POST.GET("password") # 获取用户的密码 user=authenticate(username=username,password=password) # 验证用户名和密码,返回用户对象 if user: # 如果用户对象存在
login(request,user) # 用户登陆
return redirect("/index/") else:
return HttpResponse("用户名或密码错误")

3.logout(request)注销用户

这个函数接受一个HttpResponse对象,无返回值。

当调用该函数时,当前请求的session信息全部被清除。

即使当前用户没有登陆,调用该函数也不会报错。

    from django.shortcuts import render,redirect,HttpResponse
from django.contrib.auth import authenticate,login,logout def logout_view(request):
logout(request) # 注销用户
return redirect("/index/")

4.user对象

User对象属性:username,password为必填项

  • is_staff:判断用户是否拥有网站的管理权限
  • is_active:判断是否允许用户登陆,设置为“False”时可以不用删除用户来禁止用户登陆
  • User对象的属性值可以在template里取得,如:request.user.username request.user.mobile request.user.is_staff

5.user对象的is_authenticated()

要求:

  • 用户登陆后才能访问某些页面
  • 如果用户没有登陆就访问本应登陆才能访问的页面时会直接跳转到登陆页面
  • 用户在登陆页面登陆后,又会自动跳转到之前访问的页面

方法一:

    def view1(request):
if not request.user.is_authenticated():
return redirect("/login/")

方法二:

 # login_required装饰器
from django.contrib.auth.decorators import login_required
@login_required
def views(request):
pass

如果用户没有登陆,则会跳转到Django默认的登陆URL的"/accountss/login/"

login视图函数可以在settings.py文件中通过LOGIN_URL修改默认

6.创建用户 create_user

    from django.contrib.auth.models import User

    user=User.objects.get(username="username")      # 获取用户对象
user.set_password(password="password") # 设置对象的密码
user.save()

7.修改密码check_password(password)

    from django.shortcuts import render,redirect,HttpResponse
from django.contrib.auth import authenticate,login,logout
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User @login_required
def change_passwd(request):
user=request.user # 获取用户名
msg=None if request.method=='POST':
old_password=request.POST.get("old_password","") # 获取原来的密码,默认为空字符串
new_password=request.POST.get("new_password","") # 获取新密码,默认为空字符串
confirm=request.POST.get("confirm_password","") # 获取确认密码,默认为空字符串 if user.check_password(old_password): # 到数据库中验证旧密码通过
if new_password or confirm: # 新密码或确认密码为空
msg="新密码不能为空"
elif new_password != confirm: # 新密码与确认密码不一样
msg="两次密码不一致" else:
user.set_password(new_password) # 修改密码
user.save() return redirect("/index/")
else:
msg="旧密码输入错误" return render(request,"change_passwd.html",{"msg":msg})


7.修改密码check_password(password)

方式一

from django.shortcuts import render,redirect,HttpResponse
from django.contrib.auth import authenticate,login,logout
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User @login_required
def change_passwd(request):
user=request.user # 获取用户名
msg=None if request.method=='POST':
old_password=request.POST.get("old_password","") # 获取原来的密码,默认为空字符串
new_password=request.POST.get("new_password","") # 获取新密码,默认为空字符串
confirm=request.POST.get("confirm_password","") # 获取确认密码,默认为空字符串 if user.check_password(old_password): # 到数据库中验证旧密码通过
if new_password or confirm: # 新密码或确认密码为空
msg="新密码不能为空"
elif new_password != confirm: # 新密码与确认密码不一样
msg="两次密码不一致" else:
user.set_password(new_password) # 修改密码
user.save() return redirect("/index/")
else:
msg="旧密码输入错误" return render(request,"change_passwd.html",{"msg":msg})

方式二

# 通过form检测和认证
# 认证forms表单
from django import forms class ChangePasswordForm(forms.Form):
old_password = forms.CharField(label=u'原密码', error_messages={'required': '请输入原始密码'},
widget=forms.PasswordInput(attrs={'class': 'form-control', 'style': 'width:500px;'}))
new_password1 = forms.CharField(label=u'新密码', error_messages={'required': '请输入新密码'},
widget=forms.PasswordInput(attrs={'class': 'form-control', 'style': 'width:500px;'}))
new_password2 = forms.CharField(label=u'新密码', error_messages={'required': '请重复新输入密码'},
widget=forms.PasswordInput(attrs={'class': 'form-control', 'style': 'width:500px;'})) def __init__(self, user, *args, **kwargs):
self.user = user
super(ChangePasswordForm, self).__init__(*args, **kwargs) def clean_old_password(self):
old_password = self.cleaned_data["old_password"]
if not self.user.check_password(old_password):
raise forms.ValidationError(u'原密码错误')
return old_password def clean_new_password2(self):
password1 = self.cleaned_data.get('new_password1')
password2 = self.cleaned_data.get('new_password2')
if len(password1)<6:
raise forms.ValidationError(u'密码必须大于6位') if password1 and password2:
if password1 != password2:
raise forms.ValidationError(u'两次密码输入不一致')
return password2 def save(self, commit=True):
self.user.set_password(self.cleaned_data['new_password1'])
if commit:
self.user.save()
return self.user # 改密码html
<form class="form-horizontal" role="form" method="post" action={% url "change_password" %}>
{% csrf_token %}
<div class="box-body">
{% for item in form %}
<div class="form-group">
<label class="col-sm-1 control-label">{{item.label}}</label> <div class="col-ms-8" style="margin-left: 10px;">
{{item}}
</div>
<div class="col-ms-8" style="margin-left: 10px;">
{{item.errors}}
</div>
</div>
{% endfor %}
<div class="form-group">
<div class="box-footer" style="margin-left: 10px;width: 530px;">
<button type="submit" class="btn btn-primary pull-left" style="width: 120px">更新密码</button>&nbsp;&nbsp;
</div>
</div>
</div>
</form> # 更改密码函数
@login_required()
def change_password(request):
if request.method == 'POST':
form = ChangePasswordForm(user=request.user, data=request.POST)
u = form.user
if form.is_valid():
form.save()
return HttpResponse(str(u)+"密码更新成功!")
else:
form = ChangePasswordForm(user=request.user)
kwargs = {
'form': form,
'request': request,
}
return render(request, 'accounts/change_password.html', kwargs)

8.引用用户模型get_user_model()

get_user_model().objects可以操作用户表user

#显示所有用户
get_user_model().objects.all() #删除用户
get_user_model().objects.filter(id=用户id).delete() #随机生成10位数密码
get_user_model().objects.make_random_password(length=10, allowed_chars='abcdefghjklmnpqrstuvwxyABCDEFGHJKLMNPQRSTUVWXY3456789')


CP https://www.cnblogs.com/ccorz/p/Django-zi-ding-yi-yong-hu-ren-zheng-xi-tong-zhi-zi.html
https://www.cnblogs.com/renpingsheng/p/7629997.html
https://www.cnblogs.com/ccorz/p/6358074.html
 

Django 认证的更多相关文章

  1. Django认证系统auth认证

    使用Django认证系统auth认证 auth认证系统可以处理范围非常广泛的任务,且具有一套细致的密码和权限实现.对于需要与默认配置不同需求的项目,Django支持扩展和自定义认证;会将用户信息写入到 ...

  2. django认证系统 Authentication

    Django自带一个用户认证系统,用于处理用户账户.群组.许可和基于cookie的用户会话. Django的认证系统包含了身份验证和权限管理两部分.简单地说,身份验证用于核实某个用户是否合法,权限管理 ...

  3. django 认证模块auth,表单组件form

    django认证系统(auth): 1.首先我们在新窗口中打开一个django项目,之后点击,

  4. django 认证系统--3

    WEB request中的认证 django使用sessions和middleware和reqeust对象联系在一起 它们通过给每一个reqeust请求添加一个request.user属性来代表当前用 ...

  5. django 认证系统--2

    使用django的认证系统 User 对象 User是认证系统的核心.典型代表是用户和你的站点进行交互还有限制访问.注册用户等等.django认证框架中,只存在一个User类,像'superuser' ...

  6. Django认证系统并不鸡肋反而很重要

    在使用django-admin startproject创建项目后,Django就默认安装了一个采用session实现的认证系统.这是Django相比于其他框架的一大特点:自带认证系统,开箱即用.有人 ...

  7. 自定义Django认证系统的技术方案

    Django已经提供了开箱即用的认证系统,但是可能并不满足我们的个性化需求.自定义认证系统需要知道哪些地方可以扩展,哪些地方可以替换.本文就来介绍自定义Django认证系统的相关技术细节. 自定义认证 ...

  8. Django(72)Django认证系统库--djoser

    djoser是什么?   作用:Django认证系统的REST实现.djoser库提供了一组Django Rest Framework视图,用于处理注册.登录.注销.密码重置和帐户激活等基本操作.它适 ...

  9. Django认证系统

    一.cooie与session 1.1 cookie与session cooie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又要保持状态,因此cookie就是在这样的一个场 ...

  10. python3 使用ldap3来作为django认证后台

    首先先使用ldap3测试ldap服务是否正常 我们先要拿到dc的数据,以及连接ldap的密码,还有搜索的字段(search_filter), 一般来说search_filter 这个是从负责ldap运 ...

随机推荐

  1. [EXP]Cisco RV110W - Password Disclosure / Command Execution

    #!/usr/bin/env python2 ##### ## Cisco RV110W Password Disclosure and OS Command Execute. ### Tested ...

  2. 使用SonarCloud对.NET Core项目进行静态代码分析

    本文将介绍如何使用SonarCloud进行.NET Core项目的静态代码分析.SonarCloud是SonarQube提供的基于云的版本,特别针对于开源项目是免费的. 首先,在sonarcloud. ...

  3. 五大常用算法之二:动态规划算法(DP)

    一.基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移.一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划. 二.基本思想与策略 基本 ...

  4. 高性能、高可用性Socket通讯库介绍 - 采用完成端口、历时多年调优!(附文件传输程序)

    前言 本人从事编程开发十余年,因为工作关系,很早就接触socket通讯编程.常言道:人在压力下,才可能出非凡的成果.我从事的几个项目都涉及到通讯,为我研究通讯提供了平台,也带来了动力.处理socket ...

  5. Django集成OpenLDAP认证

    本文详细介绍了django-auth-ldap的使用方法,参数含义,并提供了示例代码 版本说明 Django==2.2 django-auth-ldap==1.7.0 集成过程 Django集成LDA ...

  6. 图像处理池化层pooling和卷积核

    1.池化层的作用 在卷积神经网络中,卷积层之间往往会加上一个池化层.池化层可以非常有效地缩小参数矩阵的尺寸,从而减少最后全连层中的参数数量.使用池化层即可以加快计算速度也有防止过拟合的作用. 2.为什 ...

  7. Android中AdapterView/Adapter的深度学习

    BaseAdapter的深度学习 博主工作了几年,也用了几年的ListView等AdapterView控件,但关于Adapter的一些问题并没有深入下去,终于有时间学习总结下关于BaseAdapter ...

  8. lucene-solr源码编译导入eclipse--转

    https://www.jianshu.com/p/8a217ce05475 github地址:https://github.com/apache/lucene-solr 第一步:git clone ...

  9. 【JAVA WEB教程】jsp环境搭建(eclipse)【详细+图文】

    下载JDK(如果你的系统是64位的,那么就下载64位版本的)   然后安装,点击下一步   再点击下一步   安装成功   下载针对JAVA EE的Eclipse(如果你的系统是64位的,那么就下载6 ...

  10. 从前端角度看ajax如何保护接口的安全性

    一.前言 在web中,使用Ajax调用API,撇开跨域不讲,怎么做安全验证,防止别的网站调用呢?假设没有做安全保障,任何用户都可以直接访问接口,这回暴露出极大的安全隐患. 二.后端怎么做? 1.一些接 ...