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 用户验证的更多相关文章

  1. django 的用户验证及登录状态保持

    一.用户验证功能 Django自带用户验证及登录功能,引入模块为: from django.contrib.auth import authenticate 其中方法authenticate()的接收 ...

  2. Django——auth用户认证

    之前我们在进行用户校验的时候,总是从数据库中获取数据,然后再进行对比,就像如下这样: def login(request): if request.method == "POST" ...

  3. Django用户验证框架

    一  分析源码 User   Django的标准库存放在 django.contrib 包中.每个子包都是一个独立的附加功能包. 这些子包一般是互相独立的,不过有些django.contrib子包需要 ...

  4. Django Auth 专题

    Django的标准库存放在 django.contrib 包中.每个子包都是一个独立的附加功能包. 这些子包一般是互相独立的,不过有些django.contrib子包需要依赖其他子包,其中django ...

  5. Django 类方式view进行进行用户验证

    问题: Django中,view的书写方式有两种,一种是def函数方式,一种是class方式,函数方式通过@login_required装饰器标记函数,就必须通过用户验证,而类,则没办法通过此方法进行 ...

  6. django用户验证机制

    django的验证机制 from django.contrib.auth.decorators import login_required 需要在要验证的界面添加`@login_required` 登 ...

  7. Django框架 之 Auth用户认证

    Django框架 之 Auth用户认证 浏览目录 auth模块 user对象 一.auth模块 1 from django.contrib import auth django.contrib.aut ...

  8. Django学习笔记(13)——Django的用户认证(Auth)组件,视图层和QuerySet API

    用户认证组件的学习 用户认证是通过取表单数据根数据库对应表存储的值做比对,比对成功就返回一个页面,不成功就重定向到登录页面.我们自己写的话当然也是可以的,只不过多写了几个视图,冗余代码多,当然我们也可 ...

  9. Django (auth模块、User对象、用户认证、线上-用户认证)

    一.auth模块 django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: authenticate()    提供了用户认证,即验证用户名以及密码是否正确,一般需要usern ...

随机推荐

  1. Linux之apt-get软件管理

    apt-get 用Linux apt-get命令的第一步就是引入必需的软件库,Debian的软件库也就是所有Debian软件包的集合,它们存在互联网上的一些公共站点上.把它们的地址加入,apt-get ...

  2. 2019.8.30 记录一个Swiper的使用

    导入     flutter_swiper: ^1.1.6 引入     import 'package:flutter_screenutil/flutter_screenutil.dart'; 已下 ...

  3. BZOJ3589 动态树[树剖/暴力/容斥]

    操作0,显然直接线段树解决. 操作1,瓶颈在于重叠的链只算一次.在线段树上来看,如果一个区间被覆盖了,那么只算这个区间,子树里面也就不管了. 考虑对节点打标记来表示是否覆盖.但是,如果统一打完之后,并 ...

  4. JS自带的map()方法

    1. map()方法返回一个由原数组的每个元素调用一个指定方法后返回值组成的新数组. 2. 例子: 2.1 在字符串中使用map 在一个String上使用map方法获取字符串中每个字符所对应的ASCI ...

  5. Maven 安装 与 使用

    下载地址:http://maven.apache.org/download.cgi 下载完成后,配置环境变量 (前提 已经安装JDK  )后才能使用. 进入 bin 目录 复制 路径 添加到环境变量中 ...

  6. nodejs+mysql 批量更新

    没办法,只能通过循环一次次更新: var updateMysql = function(){ data = excel[0].data; for(var i=1; i<data.length; ...

  7. Dapper源码学习

    序言 资料 https://github.com/StackExchange/Dapper

  8. idea 2017 破解方法

    一.先进入Intellij IDEA的官网:https://www.jetbrains.com,下载安装 二.破解. 网上的破解方法较多,总结下来大概有下面几种办法供大家作为参考 声明:破解用于学习和 ...

  9. Plx9030通讯卡驱动开发与接口封装

    在学校的时候,曾经采用DDK+Driverstudio+VC6.0环境做过9054视频采集卡的驱动开发,回想起调试过程,记得最清楚的就是过无数次的计算机蓝屏重启....今天第一天来到新公司,老大就说你 ...

  10. sublime 配置sftp代码自动上传(原)

    1.首先安装Package Control 使用 ctrl+`快捷键 或者 菜单项View > Show Console 来调出命令界面 然后复制粘贴下面的Python代码到命令输入框中: im ...