zoukankan      html  css  js  c++  java
  • DAY 72 drf10

    1 jwt:json web token
       -一种认证方式,区别session,生成三段
       -头.荷载.签名,给前端,前端再发请求,需要携带
       -头.荷载再用同样的加密方式加密跟签名比较,如果一样,说明token可用
       -解析出我需要的东西(荷载中)
       -如果不一样,说明被篡改了,不可使用
       -荷载中加入过期时间
    2 使用jwt的开发流程
    -用户表,写一个登录功能,登录成功,签发一个token,返回给前端
       -以后前端访问,都要携带这个token串
       -进入我的认证类(drf,中间件),取出token,认证,认证通过,反解出当前登录用户
       -以后再视图类中使用,request.user就是当前登录用户
       
    3 djangorestframework-jwt
    -已经写好了登录功能:加一个路由,映射到它写的视图类
       -已经写好了认证类:配置在视图类中,需要跟权限类配合使用
       
       -修改登录返回的格式
       -jwt有很多配置文件:过期时间
       
       -自己写(签发token,验证token)

     

     

    1 多方式登录

    视图

    from rest_framework.generics import CreateAPIView
    from app01 import models
    from app01 import serializer

    from rest_framework.response import Response

    from rest_framework.viewsets import ViewSetMixin
    # class UserLogin(CreateAPIView): # 需要自己配路径
    class UserLogin(ViewSetMixin,CreateAPIView): # 自动生成路由
       queryset = models.UserInfo.objects.all()
       serializer_class = serializer.UserInfoModelSerializer

       def create(self, request, *args, **kwargs):

           # context是上下文,是视图类和序列化类沟通的桥梁
           ser = self.get_serializer(data=request.data)

           if ser.is_valid():
               token = ser.context['token']
               username = ser.context['username']
               return Response({'status': 100, 'msg': '登录成功', 'token': token, 'username': username})
           else:
               print(ser.errors)
               return Response({'status': 100, 'msg': '用户名或密码错误'})

    序列化类

    class UserInfoModelSerializer(serializers.ModelSerializer):

       # 这么写,字段没有自己的校验规则了
       username = serializers.CharField()

       class Meta:
           model = models.UserInfo
           fields = ['username', 'password']

       def validate(self, attrs):

           username = attrs.get('username')
           password = attrs.get('password')

           # 多方式登录,username有可能是手机号,邮箱,用户名
           if re.match('^1[3-9][0-9]{9}$', username):
               # 用手机号登录
               user = models.UserInfo.objects.filter(phone=username).first()
           elif re.match(r'^.+@.+$', username):
               # 以邮箱登录
               user = models.UserInfo.objects.filter(email=username).first()
           else:
               # 以用户名登录
               user = models.UserInfo.objects.filter(username=username).first()

           if user and user.check_password(password):
               # 登录成,签发token
               payload = jwt_payload_handler(user)
               token = jwt_encode_handler(payload)
               self.context['token'] = token
               self.context['username'] = user.username
               return attrs
           else:
               # 校验不通过
               raise ValidationError('用户名或密码错误')

     

    2 前端现状和Vue介绍

    1 前后端混合开发(前端调好页面---》给后端,加模板语言)
    2 ajax:js跟后端交互,js从后端请求数据,js的dom操作渲染页面,前后端分离的雏形
    3 Angular框架的出现--js框架:前端工程化
    4 React、Vue框架:中国人中小型项目用Vue多,老外用React
    5 大前端的概念:
    -网站,ios,安卓,小程序
    6 谷歌:flutter框架,安卓,ios,无缝运行,桌面开发
    -Dart:语言,java很像
    7 uni-app:使用vue写---》编译成ios,安卓,网站的(初创型公司)
    8 在不久的将来 ,大前端框架可能会一统天下



    Vue:渐进式框架(前端项目中一部分使用,整个项目都使用,就是一个前端项目)
    超快虚拟 DOM
    vue:1.x  2.x(用的最多)  3.x

     

    3 MVVM架构

    1 M(数据层)----V(页面展示)----VM(vm)
    2 双向数据绑定:JS中变量变了,HTML中数据也跟着改变

     

    4 单页面开发和组件化开发

    1 类似于DTL中的include,每一个组件的内容都可以被替换和复用
    2 只需要1个页面,结合组件化开发来替换页面中的内容
    页面的切换只是组件的替换,页面还是只有1个index.html

     

    5 nodejs介绍

    1 javascript:只能运行在浏览器中,解释型语言,浏览器里有它的解释器
    2 谷歌的V8引擎,抠出来,运行在操作系统之上,c写了一些底层包
    3 nodejs:解释器,写javascript的代码
    4 前端工程师,不用学后端语言,只会js,就可以写后端了
    5 node:python,
    6 npm:pip3,用来安装第三方包



    ## 前端开发的ide
    -webstorm
       -vscode
       -hbuilder
       -sublinetext
    ## 咱们用pycharm
    -webstorm和pycharm是一家,只需要装vue插件

     

    6 模板语法

    {{}}

     

    7 指令

    v-text
    v-html
    v-if
    v-show
    v-on:缩写成@
  • 相关阅读:
    Struts2SpringHibernate整合示例,一个HelloWorld版的在线书店(项目源码+详尽注释+单元测试)
    Java实现蓝桥杯勇者斗恶龙
    Java实现 LeetCode 226 翻转二叉树
    Java实现 LeetCode 226 翻转二叉树
    Java实现 LeetCode 226 翻转二叉树
    Java实现 LeetCode 225 用队列实现栈
    Java实现 LeetCode 225 用队列实现栈
    Java实现 LeetCode 225 用队列实现栈
    Java实现 LeetCode 224 基本计算器
    Java实现 LeetCode 224 基本计算器
  • 原文地址:https://www.cnblogs.com/DEJAVU888/p/14893803.html
Copyright © 2011-2022 走看看