[DRF]入门-4 :django自定义用户系统,并完成注册,验证,登录,登出,查看当前用户登功能

实现内容

  1. 自定义用户类
  2. 添加一个myid
  3. 可以正常实现数据库
  4. 可以正常注册用户
  5. 可以正常登录用户
  6. 可以得到是否登录或现在用户信息
  7. 根据myid进行登录

实现步骤

环境搭建

# 初始搭建开发环境
mkdir drf_learn4
cd drf_learn4/
virtualenv venv
source venv/bin/activate
pip install --upgrade pip
pip install django
pip install djangorestframework
pip install -U black
pip freeze >requirements.txt
django-admin startproject myproject .
python manage.py startapp myapp

# 创建数据库并测试
python manage.py makemigrations myapp
python manage.py migrate
python manage.py runserver

1. setting配置 : 在setting中添加app,并填写自己定义的类,删除Csrf中间件

# myproject/settings.py

# 1
INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "myapp",
]

# 2
MIDDLEWARE = [
    "django.middleware.security.SecurityMiddleware",
    "django.contrib.sessions.middleware.SessionMiddleware",
    "django.middleware.common.CommonMiddleware",
    # "django.middleware.csrf.CsrfViewMiddleware",
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    "django.contrib.messages.middleware.MessageMiddleware",
    "django.middleware.clickjacking.XFrameOptionsMiddleware",
]

# 3
AUTH_USER_MODEL = 'myapp.myuser'

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 配置模型

# myapp/models.py
from django.db import models
from django.contrib.auth.models import AbstractUser

# Create your models here.
class myuser(AbstractUser):
    fuckid = models.CharField(max_length=30)
    pass

3. 配置视图

# myapp/views.py
import json
from traceback import print_tb
from urllib import request

from django.contrib.auth import authenticate, login, logout
from django.http import HttpResponse
from django.shortcuts import render

from myapp.models import myuser

# Create your views here.


def regoneuser(request):
    reguser = myuser.objects.create_user(
        username="xiesi123",
        email="[email protected]",
        password="jS_123456",
        fuckid="hello",
    )
    return HttpResponse(reguser.id)


def get_user_info(request):
    if request.user.is_authenticated:
        return HttpResponse(str(request.user.id) + ":" + request.user.username)
    else:
        return HttpResponse("no user")


def myapplogin(request):
    username = request.POST["username"]
    password = request.POST["password"]
    user = authenticate(request, username=username, password=password)
    if user is not None:
        login(request, user)
        # Redirect to a success page.
        return HttpResponse("suc : " + str(user.id))
    else:
        # Return an 'invalid login' error message.
        return HttpResponse("fail")


def myapplogout(request):
    logout(request)
    return HttpResponse("logout")


def myapploginbyfuckid(request):
    m_user = myuser.objects.get(fuckid="hello")
    login(request, m_user)
    return HttpResponse(m_user.id)

4. 配置路由

# myproject/urls.py
from django.contrib import admin
from django.urls import path
from myapp import views

urlpatterns = [
    path("admin/", admin.site.urls),
    path("regoneuser/", views.regoneuser, name="regoneuser"),
    path("get_user_info/", views.get_user_info, name="get_user_info"),
    path("myapplogin/", views.myapplogin, name="myapplogin"),
    path("myapplogout/", views.myapplogout, name="myapplogout"),
    path("myapploginbyfuckid/", views.myapploginbyfuckid, name="myapploginbyfuckid"),
]

运行测试

1. 注册账号

在这里插入图片描述

2. 获取账号,当前为未登录状态所以无账号

在这里插入图片描述

3. 登录账号

在这里插入图片描述

4. 得到当前用户

在这里插入图片描述

5. 登出账号

在这里插入图片描述

6. 获取当前账号得到已登出

在这里插入图片描述

7. 通过fuckid登录

在这里插入图片描述

8. 获取当前账号

在这里插入图片描述


参考文档

自定义用户的官方文档

https://docs.djangoproject.com/zh-hans/4.1/topics/auth/customizing/#substituting-a-custom-user-model

django字段参数解析

https://docs.djangoproject.com/zh-hans/4.0/ref/models/fields/

创建账号

https://docs.djangoproject.com/zh-hans/4.1/topics/auth/default/

用户认证

https://docs.djangoproject.com/zh-hans/4.1/topics/auth/default/#django.contrib.auth.authenticate

猜你喜欢

转载自blog.csdn.net/JianShengShuaiest/article/details/127131004