Django自带的用户登录 | Django

Posted pymkl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django自带的用户登录 | Django相关的知识,希望对你有一定的参考价值。

 

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的主要内容,如果未能解决你的问题,请参考以下文章

Django实现单用户登录

使用Django自带的登录访问限制login_required

Django 框架篇: django自带的认证系统

django自带认证系统

django session为啥不会重新登录

05 - Django自带的认证系统