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:缩写成@
  • 相关阅读:
    MAXSCRIPT 连数据库(转)
    Docker安装部署ELK教程 (Elasticsearch+Kibana+Logstash+Filebeat)
    ArrayList知识点
    HashMap知识点
    使用docker 安装nacos
    记录docker 安装sonarqube和安装的一些坑
    sql优化
    Centos7下安装Docker
    使用docker安装gitlab
    docker安装jenkins
  • 原文地址:https://www.cnblogs.com/DEJAVU888/p/14893803.html
Copyright © 2011-2022 走看看