Django auth 用户验证
Django本身内建这样的功能,admin管理页面就使用了这样的验证机制,admin管理页面就有Groups和Users选项

需要在models.py中导入
from django.contrib.auth.models import User
#auth.User默认的字段只有username、password、email、first_name、last_name,一般是不够,可以增加,但不是在User中加,而是创建用户类Profile。用新的model一对一连接一起
class Profile(models.Model):
user = models.OneToOneField(User, on_delete= models.CASCADE)#一对一连接
height = models.PositiveIntegerField(default=160)
male = models.BooleanField(default=False)
website = models.URLField(null=True)
def __unicode__(self):
return self.user.username
区别是django.contrib.auth.models中的类还是models中定义的User的类,主要看view.py中函数怎么引用
user = models.User.objects...#这就是自己定义的User
user = User.objects...#这就是取自django.contrib.auth.models
django.contrib.auth提供3个主要函数:
- authenticate
- login
- logout
from django.contrib.auth import authenticate
from django.contrib import auth
from django.contrib.auth.decorators import login_required
from django.contrib import messages
@login_required(login_url='/login_2/')
def userinfo(request):
if request.user.is_authenticated():#检查用户是否登录
username = request.user.username
try:
user =User.objects.get(username=username)#找到USer的应用实例,再以此为参数,放到Profile中寻找
userinfo = Profile.objects.get(user=user)
except:
pass
template = get_template('one/agriculture/userinfo.html')
request_context = RequestContext(request) # 使用{% csrf_token %}需要用RequestContext
request_context.push(locals())
html = template.render(request_context)
return HttpResponse(html)
def login_2(request):
if request.method == 'POST':
login_form = LoginForm(request.POST)
if login_form.is_valid():
login_name=request.POST['username'].strip()
login_password = request.POST['password']
user = authenticate(username=login_name,password=login_password)
if user is not None:
if user.is_active:
auth.login(request,user)#把此用户的数据存入session中
print "success"
messages.add_message(request,messages.SUCCESS,'成功登陆了')#使用了django的信息显示框架 message framework
return HttpResponseRedirect('/userinfo/')
else:
messages.add_message(request,messages.WARNING,"账号尚未启动")
else:
messages.add_message(request,messages.WARNING,"登陆失败")
else:
messages.add_message(request,messages.INFO,"请检查输入的字段内容")
else:
login_form = LoginForm()
template = get_template('one/agriculture/login.html')
request_context = RequestContext(request)
request_context.push(locals())
html = template.render(request_context)
return HttpResponse(html)
def logout(request):
auth.logout(request)#运用auth函数功能,不需要自己处理Session变量
messages.add_message(request,messages.INFO,"成功注销了")
return redirect('/userinfo/')
前面的decorator@login_required(login_url='/login_2/')是auth验证机制提供一个方便的用法,用来告诉Django接下来处理的函数内容需要登录才能浏览,没有登录就想执行这一页,就转到登录括号中指定的login_url网址:

login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% for message in messages %}
<div class='alert alert-{{message.tags}}'>{{ message }}</div>
{% endfor %}
<!--主要是结合message framework 用-->
<p>登陆我的农商</p>
<form action="/login_2/" method="post">
{% csrf_token %}
<table>
{{ login_form.as_table }}
</table>
<input type="submit" value="登陆" />
</form>
</body>
</html>
- 使用login_form = LoginForm()需要在models.py中定义该类,但不要admin.py中admin.site.register,凡是forms.Form的都不需要,只有models.Model要
class LoginForm(forms.Form):
username = forms.CharField(label='姓名',max_length=10)
password = forms.CharField(label='密码',widget = forms.PasswordInput())
附上截图
Django auth 用户验证的更多相关文章
- django 的用户验证及登录状态保持
一.用户验证功能 Django自带用户验证及登录功能,引入模块为: from django.contrib.auth import authenticate 其中方法authenticate()的接收 ...
- Django——auth用户认证
之前我们在进行用户校验的时候,总是从数据库中获取数据,然后再进行对比,就像如下这样: def login(request): if request.method == "POST" ...
- Django用户验证框架
一 分析源码 User Django的标准库存放在 django.contrib 包中.每个子包都是一个独立的附加功能包. 这些子包一般是互相独立的,不过有些django.contrib子包需要 ...
- Django Auth 专题
Django的标准库存放在 django.contrib 包中.每个子包都是一个独立的附加功能包. 这些子包一般是互相独立的,不过有些django.contrib子包需要依赖其他子包,其中django ...
- Django 类方式view进行进行用户验证
问题: Django中,view的书写方式有两种,一种是def函数方式,一种是class方式,函数方式通过@login_required装饰器标记函数,就必须通过用户验证,而类,则没办法通过此方法进行 ...
- django用户验证机制
django的验证机制 from django.contrib.auth.decorators import login_required 需要在要验证的界面添加`@login_required` 登 ...
- Django框架 之 Auth用户认证
Django框架 之 Auth用户认证 浏览目录 auth模块 user对象 一.auth模块 1 from django.contrib import auth django.contrib.aut ...
- Django学习笔记(13)——Django的用户认证(Auth)组件,视图层和QuerySet API
用户认证组件的学习 用户认证是通过取表单数据根数据库对应表存储的值做比对,比对成功就返回一个页面,不成功就重定向到登录页面.我们自己写的话当然也是可以的,只不过多写了几个视图,冗余代码多,当然我们也可 ...
- Django (auth模块、User对象、用户认证、线上-用户认证)
一.auth模块 django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: authenticate() 提供了用户认证,即验证用户名以及密码是否正确,一般需要usern ...
随机推荐
- mysql 导入sqlserver数据库
#mysql 导入sqlserver数据库 EXEC master.dbo.sp_addlinkedserver @server = N'sjkxb00', @srvproduct=N'MySQL', ...
- gluOrtho2D与glViewport
https://blog.csdn.net/HouraisanF/article/details/83444183 窗口与显示主要与三个量有关:世界坐标,窗口大小和视口大小.围绕这些量共有4个函数: ...
- Redis 与 MQ 的区别
Redis是一个高性能的key-value数据库,它的出现很大程度补偿了memcached这类key-value存储的不足.虽然它是一个数据库系统,但本身支持MQ功能,完全可以当做一个轻量级的队列服务 ...
- Web UI开发推荐!Kendo UI for jQuery自定义小部件——使用MVVM
Kendo UI for jQuery最新试用版下载 Kendo UI目前最新提供Kendo UI for jQuery.Kendo UI for Angular.Kendo UI Support f ...
- es6 模块编译 *** is not function
今天学习vuejs,里面用到了es6的写法,遇到了一个很怪的问题,不知道有人遇到么. 安装的模块引用:import Vue from 'vue';(注意,Vue处没有{},如果加上这个就报错Uncau ...
- 【ORACLE语句备份】数据库表同步 ——定时任务管理器(EXPDP导出,IMPDP导入)
1.C:\Users\Administrator>sqlplus sys/xxx@xxx as sysdba; 2.SQL> create directory dbbak4 as 'e:\ ...
- Python 网络编程Ⅱ
客户端 接下来我们写一个简单的客户端实例连接到以上创建http://www.weixiu3721.com/的服务.端口号为 12345. socket.connect(hosname, port ) ...
- Python之hmac模块的使用
hmac模块的作用: 用于验证信息的完整性. 1.hmac消息签名(默认使用MD5加算法) #!/usr/bin/env python # -*- coding: utf-8 -*- import h ...
- 洛谷 P1135 奇怪的电梯 (dfs)
题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮:开 ...
- iOS开发之实现图片自动切换(类似android画廊效果)
#import ViewController.h #define ImageViewCount 5 @interface ViewController ()<uiscrollviewdele ...


