zoukankan      html  css  js  c++  java
  • framework —— auth认证

    ramework —— auth认证

    1.目录结构

      

    2.urls.py

    from django.conf.urls import url
    from django.contrib import admin
    from app02 import views as app02_view
    
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^hosts/',app02_view.HostView.as_view()),
        url(r'^auth/$',app02_view.AuthView.as_view())
    ]

    3.models.py

    from django.db import models
    
    # Create your models here.
    
    
    class Userinfo(models.Model):
        username = models.CharField(max_length=32)
        password = models.CharField(max_length=64)
    
        token = models.CharField(max_length=64,null=True)

    4.views.py

    from django.shortcuts import render,HttpResponse
    from rest_framework.views import  APIView
    from rest_framework.request import Request
    from rest_framework.exceptions import APIException
    from rest_framework.response import Response
    import time
    import hashlib
    # Create your views here.
    
    from app02 import models
    
    # class MyAuthentication(object):
    #     def authenticate(self,request):
    #         token = request.query_params.get('token')
    #         if token == 'ASSDSA':
    #             return ('uuuuuuuuuuu','aaaaaaaaaaa')
    #         raise  APIException('认证失败')
    
    class AuthView(APIView):
        authentication_classes = []
        def get(self,request):
            '''
            接收用户名和密码
            :param request:
            :return:
            '''
            ret ={"code":1000,"msg":None}
            user = request.query_params.get('user')
            pwd = request.query_params.get('pwd')
            user_obj = models.Userinfo.objects.filter(username=user,password=pwd).first()
            if not user_obj:
                ret['code'] = 1001
                ret['msg'] = "用户名或密码错误"
                return  Response(ret)
            
            #创建随机字符串
            ctime = time.time()
            key = "%s|%s"%(user,pwd)
            m = hashlib.md5()
            m.update(key.encode('utf-8'))
            token = m.hexdigest()
            #保存到数据
            user_obj.token = token
            user_obj.save()
            
            ret['token'] = token
            return Response(ret)
            
    
    class HostView(APIView):
    
        
        def get(self,request,*args,**kwargs):
            
            self.dispatch
            print(request.user)
            print(request.auth)
            return Response('主机列表')
    View Code

    5.utils.py

    from django.shortcuts import render,HttpResponse
    from rest_framework.views import  APIView
    from rest_framework.request import Request
    from rest_framework.exceptions import APIException
    from rest_framework.response import Response
    from app02 import models
    
    
    
    
    class MyAuthentication(object):
        def authenticate(self,request):
            token = request.query_params.get('token')
            obj = models.Userinfo.objects.filter(token=token).first()
            if obj:
                return obj(obj.username,obj)
            raise  APIException('用户认证认证失败')

    6.settings.py

    REST_FRAMEWORK = {
        'UNAUTHENTICATED_USER': None,
        'UNAUTHENTICATED_TOKEN': None,
        "DEFAULT_AUTHENTICATION_CLASSES": [
            "app02.utils.MyAuthentication",
        ],
    }

  • 相关阅读:
    JavaWeb学习总结(一)——使用Session防止表单重复提交
    java_socket套接字网络编程_实现多线程聊天
    服务器响应的生成:HTTP状态代码——HttpServletResponse接口应用
    服务器响应的生成:HTTP响应报头——HttpServletResponse接口的应用
    java_socket套接字网络编程
    JavaWeb学习总结(二)——JSP中的九个内置对象
    Servlet客户请求的处理:HTTP请求报头HttpServletRequest接口应用
    文件上传利器SWFUpload使用指南
    JavaScript高级特性创建对象的九种方式
    JavaScript高级特性实现继承的七种方式
  • 原文地址:https://www.cnblogs.com/zhongbokun/p/8419021.html
Copyright © 2011-2022 走看看