码迷,mamicode.com
首页 > 其他好文 > 详细

Django自带的用户登录 | Django

时间:2018-07-20 13:52:02      阅读:514      评论:0      收藏:0      [点我收藏+]

标签:nts   tin   blank   local   set   找不到   权限   round   默认   

 

1.用户认证

  authenticate()方法;

from django.contrib.auth import authenticate
def login(request):
    if request.method == "POST":
        username = request.POST.get("username")
        password = request.POST.get("password")
        user = authenticate(username=username,password=password)
        if user:
            print(authenticate successed)

2.用户登录

  login()方法;

from django.contrib.auth import authenticate,login
def user_login(request):
    if request.method == "POST":
        username = request.POST.get("username")
        password = request.POST.get("password")
        user = authenticate(username=username,password=password)
        if user:
            # 登录
            login(request,user)
            print(authenticate successed)

3.限制用户登录后才能访问页面

  login_required装饰器;

from django.contrib.auth.decorators import login_required

# 在具体的每个页面添加
@login_required
def dashboard(request):
    return render(request, crm/dashboard.html)

  问题:未登录用户直接访问被限制的页面,报错:http://localhost:8000/accounts/login/?next=/  这个url找不到

  解决:当未登录用户直接访问被限制的页面时,直接跳转至login页面;

      在settings.py文件中添加配置:LOGIN_URL = ‘/login/‘

      此时再次访问就会跳转至login页面;

4.登录成功后跳转至上次访问的页面

  默认登录成功后跳转至"http://localhost:8000/login/?next=/" 中next参数指定的位置;

from django.shortcut import render,redirect
from django.contrib.auth import authenticate,login
def user_login(request):
    if request.method == "POST":
        username = request.POST.get("username")
        password = request.POST.get("password")
        user = authenticate(username=username,password=password)
        if user:
        # 登录
        login(request,user)
        print(authenticate successed)
        # 验证成功时,user返回python,不成功返回None;
        return redirect(request.GET.get(‘next‘,‘/‘)) # 跳转至上次访问页面,如果没有next参数,就直接跳转首页

附1:在注册时,通常我们会使用django自带的user表,并且对其字段进行扩展,方式就是进行一对一的关联;

class UserInfo(models.Model):
    user = models.OneToOneField(User, blank=True, null=True)

  这里需要注意的是,不是所有注册用户都可以登录admin后台,所以只需要在注册时,对默认的auth_user表中的is_superuser字段进行更改(0/1);

  另外,is_active字段表示当前用户是否已经激活;

附2:如果当前页面只能拥有is_superuser权限,就可以添加判断条件:if request.is_superuser:

Django自带的用户登录 | Django

标签:nts   tin   blank   local   set   找不到   权限   round   默认   

原文地址:https://www.cnblogs.com/pymkl/p/9340812.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!