小白网-奉贤部落-奉贤免费信息发布平台

查看: 59|回复: 0

djangoform考证(django前后端分手教程)

[复制链接]

2万

主题

0

回帖

8万

积分

论坛元老

Rank: 8Rank: 8

积分
88256
发表于 2025-7-26 13:06 | 显示全部楼层 |阅读模式
今朝最风行、最风行的开辟方式是将前端和后端分手他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。合作加倍明白和聚焦,前端越来越难他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。几天不进修,就跟不上节奏他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。假如一个月不进修,绝不夸张的说,你不合适这个行业他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
Django有一个出格强大的第三方包,Django REST framework,在做前端分手开辟的时辰,强大灵活的构建Web API!
一、安装利用Django REST框架!利用要求:
REST框架需要以下内容:
  • Python(3.5、3.6、3.7、3.8、3.9)
  • 姜戈(2.2,3.0,3.1)激烈保举每一个Python和Django系列的最新补钉版本,只要官朴直式支持他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    以下软件包是可选的:
  • Pyyaml,uritemplate (5.1+,3 . 0 . 0+)-形式天生支持他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
  • Markdown(3 . 0 . 0+)-对可阅读API的Markdown支持他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
  • py gments(2 . 4 . 0+)-为降价处置增加语法高亮显现他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
  • django-filter(1 . 0 . 1+)-过滤支持他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
  • django-guardian(1 . 1 . 1+)-工具级权限支持他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。安装:
    利用pip来安装您想要利用的任何可选软件包他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    pip安装djangorestframework
    将“rest_framework”增加到INSTALLED_APPS设备中他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    INSTALLED_APPS = [...'rest_framework ',]
    假如您筹算利用可阅读的API,您还需要增加REST框架的登录和注销视图他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。将以下内容增加到您的根urls.py文件中他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    urlpatterns = [...path('api-auth/',include(' rest _ framework . URLs ')]
    至此,我们用来构建API的框架已经安装终了他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。接下来,我们需要安装一个用于JSON Web令牌认证的第三方JWT包他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。前端和后端分离隔发,JWT考证必不成少他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。至于它的考证道理,你可以去网上搜一下就晓得了!
    其次,安装并利用Django REST frameworkSimple JWT,为Django REST框架供给一个JSON Web token认证后端他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。该项目鉴戒了Django REST框架的代码和django-rest-framework-jwt的概念他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    安装:
    利用pip安装simplejwt
    pip安装djangorestframework-simplejwt
    然后,在django项目设置settings.py中,将rest _ framework _ simple jwt . authentic ation . jwthoutthentication增加到身份考证类列表中:
    REST_frameWORK = {...' DEFAULT _ authentic ation _ CLASSES ':(...' rest _ framework _ simple jwt . authentic ation . jwt authentic ation ',)...}
    此外,在您的根urls.py文件(或任何其他url设置)中,包括简单JWT的TokenObtainPairView和TokenRefreshView视图的路由,TokenVerifyView视图用于考证令牌:
    from rest _ framework _ simple jwt . views导入(tokenobservpairview,TokenRefreshView,TokenVerifyView)URL patterns =...path('api/token/',TokenObtainPairView.as _ view(),name='token_obtain_pair '),path('api/token/refresh/',TokenRefreshView.as_view(),name='token_refresh '),path('api/token/verify/',TokenVerifyView.as_view(),name='token_verify '),...]
    将rest_framework_simplejwt增加到settings.py文件中的INSTALLED_APPS设备中他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    INSTALLED_APPS = [...'rest_framework_simplejwt ',...]
    并将以下设置增加到项目settings.py文件中
    # jwt相关设置来自日期时候导入时候增量simple _ jwt = {' access _ TOKEN _ LIFETIME ':时候增量(小时=1),'REFRESH_TOKEN_LIFETIME ':时候增量(天= 1),' AUTH _ HEADER _ TYPES ':(' Bearer ',' jwt '),}
    ACCESS_TOKEN_LIFETIME设备令牌的到期时候;REFRESH_TOKEN_LIFETIME设备革新令牌的到期时候!AUTH_HEADER_TYPEStoken的请求头范例,更具体的设置请参考官方文档!
    三他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。安装并利用django-simple-captcha包来天生考证码他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。具体安装利用请参考我的另一篇文章他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。前后端分离隔发和django的表单系统无关,我们只需要序列化!
    参考文章:
    牢固
    pip安装django-简单-考证码
    将考证码增加到您的INSTALLED_APPS设备中他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    INSTALLED_APPS = [...'考证码',...]
    将以下视图增加到项目根urls.py!
    path('captcha/'),include('captcha.urls '),
    最初,别忘了跑步
    python manage.py停止迁移python manage.py迁移
    至此,我们的第三方包安装终了他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。现在,起头我们的逻辑构建和序列化吧!
    四、在app的views.py 中建立天生考证码的视图接口# dadmin/views.pyimport base64import jsonfrom django.http import HttpResponsefrom rest_framework.views import APIViewfrom captcha.views import CaptchaStore, captcha_imageclass CaptchaAPIView(APIView):def get(self, request):hashkey = CaptchaStore.generate_key()try:#获得图片idid_ = CaptchaStore.objects.filter(hashkey=hashkey).first().idimgage = captcha_image(request, hashkey)#将图片转换为base64image_base = 'data:image/png;base64,%s' % base64.b64encode(imgage.content).decode('utf-8')json_data = json.dumps({"id": id_, "image_base": image_base })# 批量删除过期考证码CaptchaStore.remove_expired()except:json_data = Nonereturn HttpResponse(json_data, content_type="application/json") 四他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。建立视图接口# d admin/views . pyimport base 64import JSonfrom django . http importhttpresponsefrom rest _ framework . views导入APIViewfrom captcha.views导入CaptchaStore,captcha _ image类captcha API view(API view):def Get(self,Request):Hashkey = CaptchaStore . generate _ key()[/h首先()他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。ID[/h IMgage = captcha _ image(request,hash key)  #将图片转换为base64image _ base = ' data:image/png;base64,% s“% base64 . b 64 encode(im gage . content)他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。decode(' utf-8 ')JSON _ data = JSON . dumps({ " id ":id _," image_base": image_base })#批量删除过期考证码captchastore . remove _ expired()除外:JSON _ data = nonereturn httpresponse(JSON _ data)
    动词 (verb的缩写)在urls.py中增加考证码接口视图fromviews.captcha导入captcha API viewURL patterns =[path(' captcha/',captchaapiview.as _ view(),name =' captcha _ API') ]
    完成以上步调后,我们获得以下界面他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。
    #登录接口api/token/ POST用户名密码 #革新令牌接口api/token/refresh/ POST革新令牌#考证令牌接口API/token/verify/POST token#返回考证码接口api/captcha/
    在阅读器中,您可以看到登录界面视图他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。答应提交用户名和密码字段他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。假如您需要考证码考证功用,您必须答应提交和考证考证码他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。这里的做法是重写TokenObtainPairView,先继续它,扩大考证码字段!
    起头之前,我们先在项目标同一个目录下建立一个utils的文件夹,然后在里面建立一个get_token.py的文件,机关一个手动返回令牌的方式,供我们随时利用,快速返回令牌!
    # utils/get _ token . pyfrom rest _ framework _ simple jwt . tokens导入革新令牌defget _ tokens _ for _ user(user):#手动返回令牌refresh = refresh token . for _ user(user)return {' refresh ':str(refresh),' access ':str(refresh . access _ token),}
    在扩大TokenObtainPairView之前,我们必须先扩大序列化类TokenObtainPairSerializer来机关我们自己的序列化类!
    在利用法式中建立一个serializer.py文件,并引入以下代码
    from django.utils import timezonefrom rest_framework import serializersfrom rest_framework_simplejwt.serializers import TokenObtainPairSerializerfrom django.contrib.auth import authenticatefrom utils.get_token import get_tokens_for_userfrom captcha.fields import CaptchaStoreclass DmallTokenObtainPairSerializer(TokenObtainPairSerializer):captcha = serializers.CharField(max_length=4, required=True,trim_whitespace=True, min_length=4,error_messages={"max_length": "图片考证码仅答应4位","min_length": "图片考证码仅答应4位","required": "请输入图片考证码"}, help_text="图片考证码")imgcode_id = serializers.CharField(required=True, write_only=True,help_text="图片考证码id")@classmethoddef get_token(cls, user):token = super().get_token(user)token['captcha'] = user.captchatoken['imgcode_id'] = user.imgcode_idreturn tokendef validate_captcha(self, captcha):# 考证码考证try:captcha = captcha.lower()except:raise serializers.ValidationError("考证码毛病")img_code = CaptchaStore.objects.filter(id = int(self.initial_data['imgcode_id'])).first()if img_code and timezone.now() gt; img_code.expiration:raise serializers.ValidationError("图片考证码过期")else:if img_code and img_code.response == captcha:passelse:raise serializers.ValidationError("考证码毛病")def validate(self, attrs):# 删除考证码del attrs['captcha']del attrs['imgcode_id']authenticate_kwargs = {'username': attrs['username'],'password': attrs['password'],}# 考证当前登录用户self.user = authenticate(**authenticate_kwargs)if self.user is None:raise serializers.ValidationError('账号或密码不正确')# 登录成功返回token信息token = get_tokens_for_user(self.user)return tokenfrom django . utils import time zonefrom rest _ framework import serializerfrom rest _ framework _ simple jwt . serializer import tokengetpairserializerfrom django . contrib . auth import authenticatefrom utils . get _ token import get _ tokens _ for _ userfrom captcha . fields import CaptchaStoreclass dmalltokengetpairserializer(tokengetpairserializer):captcha = serializer他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。CharField(max_length=4,required=True, trim _ whitespace = true,min _ length = 4,error _ messages = {" max _ length ":"图片考证码只答应4位数","required ":"请输入图片考证码"},help_text= "图片考证码") imgcodeget _ token(user)token[' Captcha ']= user . Captchatoken[' img code _ id ']= user . img code _ idreturn tokendef validate _ Captcha(self,Captcha):#考证码考证try:Captcha = Captcha . lower()except:raise serializer . validation error("考证码毛病")first()if img _ code and time zone . now() gt;img _ code . expiration:raieserializer . validation error("图片考证码已过期") else:  if img _ code和img _ code . response = = captcha:passelse:H/]raieserializer . validation error("考证码毛病")def validate(self,Attr):  #删除考证码['captcha'] [/h' password ':attrs[' password '],}#考证当前登录的用户self.user = authenticate(* * authenticate _ kwargs)假如self . user为none:raise serializer . validation error('帐号或密码不正确')#成功登录后返回token信息token = get _ tokens _ for _ user(self他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。user)  returntoken
    上面的代码正文已经写的很清楚了,可以自己看代码了解他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。不难啊!
    (此处已增加圈子卡片,请到本日头条客户端检察)在views.py中机关我们自己的登录视图界面!
    从rest_framework导入序列化法式从rest_framework_simplejwt.views导入tokenobservpairview从序列化法式导入dmalltokenobservpairserializer类dmalltokenobservpairwise(tokenobservpairwise):# log in成功返回令牌serializer _ class = dmalltokenobservpairserializer
    建立我们在urls.py中构建的登录视图接口路由
    从他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。视图导入dmalltokenobsolvepairviewURL patterns =[path(' mytoken/',dmalltokenobsolvepairview . as _ view(),name='mytoken')]
    进入界面看到可以提交考证码和考证码id的表单他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。接下来,前端是活的!我们的背景界面已经完成到这里了!
    前端思绪是在衬着模板之前先用一个get请求获得到考证码与id,将考证码显现在页面,imgcode id将获得到的默许值付给他,并隐藏该表单,再用post请求发送数据到登录接口就成功了,逻辑很是简单,代码比力多,就不写了,大师依照这个思绪自己走一遍!前真个思绪是,在衬着模板之前,用get请求获得考证码和id,在页面上显现考证码,imgcode id会把获得的默许值付给他,隐藏表单,然后用post请求把数据发送到登录界面他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。逻辑很简单,代码很多,就不写了他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。这个思绪我们自己过吧!
    参考仓库代码:https://gitee.com/xingfugz/django-mall
    假如你也在自学python大概django,请关注我他早就发现系统有个隐藏的缝隙私下花了好几个早晨优化了代码。我会延续更新关于Django和Python的技术干货和小案例!
  • 回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|小白网-奉贤部落-奉贤免费信息发布平台  

    GMT+8, 2025-11-11 15:07 , Processed in 0.195878 second(s), 21 queries .

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表