用户登录
一、使用django
中自带的用户登录及权限拦截的方式
- 1、登录页面就不演示了
2、视图层中导包
from django.shortcuts import render, redirect from django.views.generic import View # authenticate是验证用户名及密码的 # login的登陆的方法 from django.contrib.auth import authenticate, login
3、视图类
class LoginView(View): """ 用户登录的视图 """ def get(self, request, *args, **kwargs): return render(request, 'login.html', kwargs) def post(self, request, *args, **kwargs): username = request.POST.get('username', None) password = request.POST.get('password', None) # 校验用户名及密码 user = authenticate(username=username, password=password) if user is not None: login(request, user) # 登陆成功重定向到主页 return redirect('home') return self.get(request, message='用户名或者密码错误')
4、总结
- 1.使用
django
中自带的login
登陆方法,会把用户名存放到request
中,在别的视图中需要获取用户名直接使用request.user
就可以 - 2.登陆成功后会在
django_session
表中创建一条记录,默认的过期时间是2周
- 1.使用
二、修改登录方式
django
默认是使用用户名登陆的,在现实中往往可以使用用户名、手机号码、邮箱等来登陆
1、视图层导包
from django.contrib.auth.backends import ModelBackend from django.db.models import Q # 导入自己定义的模型 from users import models
2、定义一个类继承
ModelBackend
类class CustomBackend(ModelBackend): """ 定义校验用户登录 """ def authenticate(self, request, username=None, password=None, **kwargs): try: # 使用用户名、邮箱、手机号码都可以登录 user = models.UserProfileModel.objects.get(Q(username=username) | Q(email=username) | Q(mobile=username)) if user.check_password(password): return user except Exception as e: print(e) return None
3、在
settings.py
中配置使用我们自定义的类# 配置登录的类 AUTHENTICATION_BACKENDS = ( 'users.views.login.CustomBackend', )
4、上面配置后登陆的视图类跟上面一样的,不需要改动
5、关于别的视图中获取到用户信息
class IndexView(View): def get(self, request, *args, **kwargs): print('*' * 100) # 获取登陆的用户信息 print(request.user) # 返回True/False print(request.user.is_authenticated) print('*' * 100) return render(request, 'index.html')