当前位置: 首页 > news >正文

网站制作公司信科网络wordpress商城微信

网站制作公司信科网络,wordpress商城微信,快速建站工具,wordpress安装不了 404介绍 创建系统管理app,用于管理系统的用户,角色,权限,登录等功能,项目中将使用django-rest_framework进行用户认证和权限解析。这里将完成用户认证 用户验证 rest_framework.authentication模块中的认证类&#xff…

介绍

创建系统管理app,用于管理系统的用户,角色,权限,登录等功能,项目中将使用django-rest_framework进行用户认证和权限解析。这里将完成用户认证

用户验证

rest_framework.authentication模块中的认证类,例如:
session认证:SessionAuthentication(基于session)
token 认证:TokenAuthentication(API Token)
自定义认证:BasicAuthentication(HTTP Basic Auth)

  1. 这里采用djangorestframework-simplejwt设计自定义认证类和自定义登录
pip install djangorestframework-simplejwt
  1. 创建用户模型表user
from django.db import models from django.contrib.auth.hashers import make_password, check_password# Create your models here.class User(models.Model):username = models.CharField(max_length=255, unique=True, verbose_name="手机号")password = models.CharField(max_length=255, unique=False, verbose_name="密码")is_vip = models.BooleanField(default=False,verbose_name="是否为vip")vip_expires_at = models.DateTimeField(auto_now_add=True,verbose_name="vip过期时间")is_active = models.BooleanField(default=True)class Meta:db_table = "user"verbose_name = "用户账号表"verbose_name_plural = verbose_name
  1. 数据库迁移
python manage.py makemigrations
python manage.py migrate 
  1. 在根目录下创建utils目录,在utils目录中创建文件Authentication.py和jwt.py
 ## Authentication.pyfrom rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from rest_framework_simplejwt.views import TokenObtainPairView
from rest_framework import serializers
from user.models import User# 自定义认证类
class MyTokenObtainPairSerializer(TokenObtainPairSerializer):"""自定义登录认证,使用自有用户表username、password这两个字段为必传字段因为 DRF 要检查这些字段是否有效username_field = 'phone_number'  这是重命名了,username必传字段设置为了phone_number字段必传phone_number = serializers.CharField(required=False) # 这个是设置了自定义的字段是否必传"""def validate(self, attrs):username = attrs.get("username")password = attrs.get("password")if not username or not password:raise serializers.ValidationError("phone_number and password are required")try:user = User.objects.get(username=username, password=password)except User.DoesNotExist:raise serializers.ValidationError("No user found with this username and password.")print(user)refresh = self.get_token(user)data = {"userId": user.id, "token": str(refresh.access_token), "refresh": str(refresh),'is_vip': user.is_vip}return dataclass MyTokenObtainPairView(TokenObtainPairView):serializer_class = MyTokenObtainPairSerializer
## jwt.py
from rest_framework_simplejwt.authentication import JWTAuthentication
from rest_framework_simplejwt.exceptions import InvalidToken, AuthenticationFailed
from django.utils.translation import gettext_lazy as _
# 自定义的用户模型
from user.models import Userclass MyJWTAuthentication(JWTAuthentication):'''修改JWT认证类,返回自定义User表对象'''def get_user(self, validated_token):try:user_id = validated_token['user_id']except KeyError:raise InvalidToken(_('Token contained no recognizable user identification'))try:user = User.objects.get(**{'id': user_id})except User.DoesNotExist:raise AuthenticationFailed(_('User not found'), code='user_not_found')return user
  1. 在settings.py同级目录下创建drf_settings.py 并引入settings.py 中
## drf_settings.py
REST_FRAMEWORK = {'DEFAULT_PERMISSION_CLASSES': ['rest_framework.permissions.IsAuthenticated',],'DEFAULT_AUTHENTICATION_CLASSES': ['utils.jwt.MyJWTAuthentication' # 认证方式为自定义的认证类],
}

引入settings中

import drf_settings
REST_FRAMEWORK = drf_settings.REST_FRAMEWORK
  1. 创建一个app:userauth,在views.py中写入一个接口视图
from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response# Create your views here.class UserTestView(APIView):def post(self, request,*args, **kwargs):s = str(request.user.__dict__)return Response(s)
  1. 在app:userauth:urls中设置路由
from django.urls import path, include
from rest_framework import routers
from rest_framework_simplejwt.views import TokenVerifyView, TokenRefreshView
from utils.authentication import MyTokenObtainPairView
from userauth.views import UserTestViewrouter = routers.DefaultRouter()urlpatterns = [path("login/", MyTokenObtainPairView.as_view()),                           # 登录path("refresh/", TokenRefreshView.as_view(), name="token_refresh"),        # 刷新tokenpath("verify/", TokenVerifyView.as_view(), name="token_verify"),            # 验证tokenpath("test/", UserTestView.as_view(), name="test")
]
urlpatterns.append(path('', include(router.urls)))
  1. 这里没有写注册功能,所以只有手动在数据库中创建一个用户
    在这里插入图片描述

  2. 使用postman进行登录测试
    在这里插入图片描述

  3. 刷新token测试
    在这里插入图片描述

  4. 接口测试
    在这里插入图片描述

参考链接:https://blog.csdn.net/qq_42410176/article/details/130568130?spm=1001.2014.3001.5502

http://www.yayakq.cn/news/67000/

相关文章:

  • 微信扫码登记小程序seo网站诊断顾问
  • 三五互联网站管理登录地址网站经营范围
  • 网站换空间 site怎么搭建php网站
  • 找别人做网站要注意什么手机版网站开发
  • 深圳家具网站建设dede 网站地图怎么做
  • asp网站源码 怎么安装免费推广引流平台app
  • 建网站要花费多少钱asp网站加速
  • 北京网站建设公司哪个好制作网站的公司还能赚钱吗
  • thymeleaf做网站 seo玉溪网站网站建设
  • 做网站不赚钱定兴做网站的
  • 西峰住房和城乡建设局网站深圳12个区排名
  • 南昌网站建设一般多少钱一年东营大众网
  • 石家庄整站优化无锡定制化网站建设
  • 微商产品做网站服务器ip做网站
  • 怎么做网站管理设计广告用什么软件
  • 做网站的收益pk10网站怎么做
  • 山东省住房与建设厅网站大作设计网站官网登录入口
  • 留言网站怎么做个人养老保险怎么查询
  • 网站内链工作做足网站备案后名称怎么改
  • 凡科网站制作wordpress调用分类的所有子目录
  • 旅游类网站设计模板下载新建的网站需要维护吗
  • 网站解析时候让做别名一个空间可以绑定几个网站
  • 常熟做网站公司排名网站建设案列
  • 出口网站怎么做山东省住房和城乡建设厅二级建造师
  • 云集网站建设公司唐山哪里做网站
  • 购物网站 服务器 带宽 多大一站式服务门户
  • 盐山县网站建设中国建筑网官网校园招聘
  • 学做网站 空间 域名荣耀手机商城官方网
  • 古典lash网站带后台源码下载seo搜索引擎优化包邮
  • 南头网站建设用dw做一个简单的网页