惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cisco Talos Blog
Cisco Talos Blog
阮一峰的网络日志
阮一峰的网络日志
云风的 BLOG
云风的 BLOG
D
Docker
Vercel News
Vercel News
IT之家
IT之家
Recent Announcements
Recent Announcements
Last Week in AI
Last Week in AI
V
Visual Studio Blog
Engineering at Meta
Engineering at Meta
腾讯CDC
Google DeepMind News
Google DeepMind News
I
InfoQ
博客园 - 三生石上(FineUI控件)
Apple Machine Learning Research
Apple Machine Learning Research
The GitHub Blog
The GitHub Blog
博客园 - Franky
The Cloudflare Blog
A
About on SuperTechFans
有赞技术团队
有赞技术团队
Y
Y Combinator Blog
T
Tenable Blog
P
Proofpoint News Feed
Recorded Future
Recorded Future
Security Latest
Security Latest
H
Hackread – Cybersecurity News, Data Breaches, AI and More
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
博客园 - 聂微东
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Google Online Security Blog
Google Online Security Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Simon Willison's Weblog
Simon Willison's Weblog
The Last Watchdog
The Last Watchdog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
N
News and Events Feed by Topic
TaoSecurity Blog
TaoSecurity Blog
U
Unit 42
The Hacker News
The Hacker News
Martin Fowler
Martin Fowler
T
Threat Research - Cisco Blogs
NISL@THU
NISL@THU
F
Full Disclosure
M
MIT News - Artificial intelligence
人人都是产品经理
人人都是产品经理
Hugging Face - Blog
Hugging Face - Blog
V
V2EX
Project Zero
Project Zero

博客园 - 佛西亚

https访问 asp.net Core上传文件 .NET Framework 4.0 DLL注册GAC 使用iText 7读取PDF文件中的文本和图片 用SQL Server Profiler跟踪AX执行的SQL语句 D365升级包 Ant Design Pro V5 + Django Restful Framework Token认证前台实现 Ant Design Pro V5 + Django Restful Framework Token认证后台实现(一) D365 FO产生随机字符串 D365 FO Array增加排序 D365 FO无法命中断点 Ant Design Pro V5 开发时使用后台服务数据 JavaScript跨域访问 同步数据库报错 DataEntity增加关联DataSource Java通过代理上传文件到Azure blob 使用iText7操作PDF D365 FO Json序列化和反序列化 D365 FO操作Azure Blob
Ant Design Pro V5 + Django Restful Framework Token认证后台实现(二)
佛西亚 · 2020-12-26 · via 博客园 - 佛西亚

Python,Django,Django Restful framework和Django Restful framework Simple-JWT的安装和配置官方教程和各种文章很多,这里就不记录了。
1.Setting设置
Simple-JWT的设置在官方的教程里也有详细的描述,这里赋复制粘贴一下。

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES':(
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES':(
        'rest_framework_simplejwt.authentication.JWTAuthentication',        
    ),    
}
DEFAULT_AUTHENTICATION_CLASSES指定用simplejwt进行Token认证。

2.创建登陆方法
DRF(Django Restful Framework)有不同类型的view向外提供接口,比如function-base view,class-based view(APIView),generic-view,不同的view不同的封装层次,带来便利性的同时会损失一些灵活性。
可以结合不同的场景使用,具体的用法也没太仔细研究,暂时感觉APIView用起来更顺手,其他的view等做到后续需求再研究。
登陆成功或者失败都需要返回信息给前端,这样就涉及到序列化的操作。
需要创建一个Serializer类。

class LoginSerializer(serializers.Serializer):
    status = serializers.CharField()    
    token = serializers.CharField() 

结合ADPV5(Ant Design Pro V5)的要求,返回状态和token,方便验证登陆状态,如果验证成功,返回token,ADPV5保存起来,后续请求把token带上通过验证。
登陆方法

class UserLoginView(APIView):
    authentication_classes  = []
    permission_classes = []
    def post(self, request, *args, **kwargs):        
        loginEntity = LoginEntity()        
        user = authenticate(username = request.data["username"], password = request.data["password"])
        if user:
            token = self.getToken(user)
            loginEntity.token = token.access_token                
            loginEntity.status = "ok"
        else:
            loginEntity.status = "no"

        serializer = LoginSerializer(loginEntity)
        return JsonResponse(serializer.data)

    def getToken(self, user):       
        token = RefreshToken.for_user(user)      
        return token

登陆的界面不需要验证权限,所以将权限验证设为空,这样就不会进行Token的验证了。
验证前端传过来的用户名和密码是否正确,如果正确通过getToken获取token,然后返回给前端。
3.关联url
在urlPatterns中添加登陆的url和View的关联关系,这里用的url跟ADPV5要求的保持一致,省得转换了。

urlpatterns = [  
    url(r'^api/login/account', UserLoginView.as_view()),  
]

4.用Postman进行调用测试

DRF后台实现登陆并返回JWT的过程很简单,当然应该有更好的实现方式,暂时不知道,先这样做了,等有更好的方法再改进。