在models里继承AbstractUserhtml
from django.contrib.auth.models import AbstractUser from django.db import models import random # Create your models here. # 构建咱们的用户 class MyUser(AbstractUser): phone = models.CharField( max_length=20, verbose_name="手机号", unique=True ) icon = models.ImageField( upload_to='icons', null=True )
在settings.py中设置前端
AUTH_USER_MODEL = "APP名.类名(MyUser)"
迁移成功后能够在数据库中看到python
首先新建一个作登陆认证的.py文件数据库
from django.contrib.auth.backends import ModelBackend # 导入本身的用户类 from .models import MyUser class MyBackend(ModelBackend): # 复写authenticate def authenticate(self, request, username=None, password=None, **kwargs): # 思路 1.先找用户 2.在作验证密码 # 找人 user = None try: user = MyUser.objects.get(username=username) except: try: user = MyUser.objects.get(phone=username) except: return None # 作密码验证 if user.check_password(password): return user else: return None
修改settings.py文件django
# 指定认证的类 AUTHENTICATION_BACKENDS = ( '你APP的名字.文件名.MyBackend(认证类名)', )
再在views写逻辑后端
def my_login(req): if req.method == 'GET': return render(req, 'login.html') else: params = req.POST u_name = params.get('u_name') pwd = params.get('pwd') # 数据校验 # 用户校验 user = authenticate(username=u_name, password=pwd) if user: # 用户登陆 login(req, user) # 登陆成功返回页面 return redirect('/dj05app/my_index') else: return HttpResponse("用户名或者密码错误")
前端登陆代码以下app
<form action="{% url 'dj05app:my_login' %}" method="post" style="text-align: center"> {% csrf_token %} <input type="text" name="u_name" placeholder="用户名或手机号"> <br> <input type="password" name="pwd" placeholder="密码"> <br> <input type="submit" value="登陆">
登陆后的页面跳转(前端)dom
欢迎{{ u_name }}
登陆后的页面跳转(后端)post
@login_required(login_url="/dj05app/my_login") def my_index(req): user = req.user return render(req, 'index.html', {"u_name": user.username})
注意:ui
做用:保证一个API在用户调用时,保证用户是登陆状态
login_url 参数 指定的值是咱们本身的登陆页面的url
就是指 若是没有用户,则会跳转到登陆页面
因为咱们是直接用的登陆,全部用户信息是在后台添加的
添加用户名和密码
添加手机号