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 ... 
随机推荐
- Spring事务源码分析
			首先看例子,这例子摘抄自开涛的跟我学spring3. @Test public void testPlatformTransactionManager() { DefaultTransactionDe ... 
- Python学习笔记:序列构成的数组
			列表推导是一种构建列表(list)的快捷方式 #列表推导 symbols = '!@#$%' codes = [ord(symbol) for symbol in symbols] #ord()Pyt ... 
- 15-资源等待类型sys.dm_os_wait_stats
			一.总结 1.网址 https://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/ ... 
- 箭头函数中可改变this作用域,回调函数用箭头函数this指向page,自定义事件用箭头函数this指向undefined
			1.回调函数中,用箭头函数改变this的作用域 success: (res)=>{ this.setData({ //此时,this指向page页面 ... }) } 2.自定义事件中,如果使用 ... 
- ffmpeg 在vs配置的库名称
			avcodec.lib; avformat.lib; avutil.lib; avdevice.lib; avfilter.lib;postproc.lib;swresample.lib; swsca ... 
- CodeForces 788B - Weird journey [ 分类讨论 ] [ 欧拉通路 ]
			题意: 给出无向图. good way : 仅有两条边只经过一次,余下边全经过两次的路 问你共有多少条不同的good way. 两条good way不同仅当它们所经过的边的集合中至少有一条不同 (很关 ... 
- 【leetcode】1286. Iterator for Combination
			题目如下: Design an Iterator class, which has: A constructor that takes a string characters of sorted di ... 
- jquery image选择器 语法
			jquery image选择器 语法 作用::image 选择器选取类型为 image 的 <input> 元素.无锡大理石测量平台 语法:$(":image") jq ... 
- BZOJ 5418: [Noi2018]屠龙勇士 EXCRT+multiset
			题解:求解形如 $A[i]ans\equiv b[i](mod$ $p[i])$ 的 $x$ 的最小正整数解. 考虑只有一个等式,那么可以直接化成 $exgcd$ 的形式:$A[i]ans+p[i]y ... 
- Teamviewer解决许可证授权的问题
			提交商业用途表 https://www.teamviewer.com/zhCN/pricing/commercial-use/ 
 
			
		

