Django开发之自定义User


前言:Django 内置模块 contrib.auth 预置了一张用户表 user ,如果不符合我们的需求,我们可以自定义User表,增加一些我们需要的字段,来完成我们自己的User表。


1.自定义User表

同样,我们新建一个flyuser的应用,同样移到apps文件夹下,然后在settings里面添加这个应用。
在flyuser下的models添加以下代码:

from django.db import models
from django.contrib.auth.models import AbstractUser

class FlyUser(AbstractUser):
    id = models.BigAutoField(primary_key=True)
    # 用户类型
    usertype = models.PositiveIntegerField()
    # 真实姓名
    realname = models.CharField(max_length=30, db_index=True)

    class Meta:
        db_table = "fly_user"

然后再settings.py文件中添加如下设置:

AUTH_USER_MODEL = 'flyuser.User'

然后进行生成和迁移fly_user表。

2.设置url路由

同样在flyuser新建urls.py文件添加如下代码:

from django.urls import path
from apps.flyuser import views

urlpatterns = [
    path('register',views.register), #注册
    path('login',views.log),#登录
    path('quit',views.quit)#退出
]

编辑django_demo目录下的urls.py
在这里插入图片描述

3.处理注册、登录、退出请求

编写flyuser下的views.py

from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.hashers import make_password
from django.http import JsonResponse
from apps.flyuser.models import FlyUser

def register(request):
    """注册"""
    userName = request.POST.get('username')
    passWord = request.POST.get('password')
    realName = request.POST.get('realname')
    try:
        if FlyUser.objects.filter(username=userName).exists():
            return {'ret': 1, 'msg': f'登录名 {userName} 已经存在'}
        user = FlyUser.objects.create(
            username=userName,
            password=make_password(passWord),
            usertype=1,
            realname=realName
        )
        return {'ret': 0, 'id': user.id}
    except:
        return {'ret': 1, 'msg': '错误信息'}

def log(request):
    """登录"""
    if request.session.has_key('islogin'):
        username = request.session["username"]
        return JsonResponse({'ret': 0,'msg':'{}已经登陆成功'.format(username)})
        
    userName = request.POST.get('username')
    passWord = request.POST.get('password')
    # 使用 Django auth 库里面的 方法校验用户名、密码
    user = authenticate(username=userName, password=passWord)
    # 如果能找到用户,并且密码正确
    if user is not None:
        if user.is_active:
            login(request, user)
            # 只要session中有islogin,就认为用户已登录
            request.session['islogin'] = True #用浏览器才能测试出效果
            # 记住登录的用户名
            request.session['username'] = user.username
            return JsonResponse({'ret': 0})
        else:
            return JsonResponse({'ret': 1, 'msg': '用户已经被禁用'})
    # 否则就是用户名、密码有误
    else:
        return JsonResponse({'ret': 1, 'msg': '用户名或者密码错误'})


def quit(request):
    """退出"""
    logout(request)
    return JsonResponse({'ret': 0})

4.测试

import requests,pprint

def register():
    payload = {
        'username':'fly',
        'password':'123456',
        'realname':'王大爷'
    }
    response = requests.post('http://127.0.0.1:8000/api/flyuser/register',data=payload)
    pprint.pprint(response.json())

def login():
    payload = {
        'username':'fly',
        'password':'123456'
    }
    response = requests.post('http://127.0.0.1:8000/api/flyuser/login',data=payload)
    pprint.pprint(response.json())

if __name__ == '__main__':
    # register()
    login()

结束!!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等待着冬天的风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值