首页 > 其他分享 >路飞项目---day07()

路飞项目---day07()

时间:2023-03-03 16:47:24浏览次数:46  
标签:username git 短信 day07 --- 路飞 token user 序列化

昨日回顾

# GIt内容大回顾

# 1 版本管理软件 :git,svn
	-代码合并
    -代码版本管理
    -协同开发,合并代码
# 2 git 跟 svn 区别
# 3 git 安装:相应平台软件,下载完成,一路下一步----》命令:git

# 4 git ,gitlab,gitee,github,bitbucket

# 5 git 工作流程
	-工作区
    -暂存区
    -版本库
    -远程仓库
    
    
# 6 git 常用命令
	-git init 名字   # .git 隐藏
    -git status
    -git add
    -git commit -m
    -git reset --hard 版本号
    -git log
    -git reflog
    
    -设置用户名(全局和局部)
    	git config --global user.name '用户名'
# 7 git 忽略文件
		.gitignore
    
    
    
# 8 分支管理
	-查看:git branch
    -git branch dev
    -git checkout dev
    -git branch -d dev
    -合并分支:git merge dev
    
# 9 远程仓库(gitee)
	-远程:创建仓库,空仓库
    -本地:
    	git init
        git add 
        git commit 
        # 添加远程仓库
        git remote add origin 地址(ssh/http)
        # 删除远程仓库
        git remote remove origin
        # 查看远程仓库
        git remote
        
        git push origin master  # 需要输入用户名密码
        git pull origin master  # 每次提交代码之前先拉
        
# 10 git clone 地址
	-你是开发者,项目已经有了,你需要克隆下来
    git clone 开源项目 # 没有任何阻碍
    
# 10 ssh操作远程仓库
	-公钥私钥----》
    -公钥配置在gitee上,以后使用ssh推送代码,就不需要验证
    -git remote add origin 地址(ssh)
    
    
# 11  冲突(面试)
	-多人在同一分支开发
    -分支合并
    
# 12 线上分支合并
	-提交pr
    
    
# 13 远程仓库回滚(忘掉)


    
    
# 记住的
	git add
    git commit -m
    git pull origin dev
    git push origin dev

今日内容

1 为开源项目贡献代码

# github,gitee 看到好的开源项目,  发现有bug,为他增加新功能---》你加入了代码---》想合并进开源项目,如何做

# 步骤:
	1 先fork开源项目--》复制这个项目到我的远程仓库中
	2 clone下来,改代码,一路提交到我的远程仓库中
	3 提交pr,等作者同意

先fork开源项目,到我的远程仓库中
image
clone下来,改代码,一路提交到我的远程仓库中 提交pr,等作者同意
image
.
.
.
.
.

2 pycharm使用git

# 只要用命令操作的,都可以点击完成

2.1 先配置pycharm使用git

image-20230303100202661

image-20230303095408897

image-20230303095542916

image-20230303095614690

image-20230303095712512

image-20230303095927399

image-20230303100341245

image-20230303100439931

image-20230303100555402

image-20230303100649080

.
.
.
.

3 登录注册功能分析

# 接口分析
	5 校验手机号是否存在的接口
	1 多方式登录接口:用户名/手机号/邮箱 +密码都可以登录

    2 发送手机验证码接口   (借助于第三方短信平台)
    3 短信登录接口
    4 注册接口
    

.
.
.
.
.

4 手机号是否存在接口

urls.py

from rest_framework.routers import SimpleRouter
from . import views

router = SimpleRouter()
# http://127.0.0.1:8000/api/v1/user/userinfo/send_sms/  get   发送短信
router.register('userinfo',views.UserView,'userinfo')

urlpatterns = [

]
urlpatterns += router.urls

views.py

class UserView(GenericViewSet):
    @action(methods=['GET'], detail=False)  # 保证这个接口的安全(短信轰炸机--》解析出了好多网站的发送短信接口,用多线程)
    def send_sms(self, request, *args, **kwargs):
        try:
            # 从地址栏中取出手机号  query_params :queryDict
            mobile = request.query_params['mobile']
            User.objects.get(mobile=mobile)
        except Exception as e:
            raise e
            # return APIResponse(code=777,msg='手机号不存在')
        return APIResponse(msg='手机号存在')

4.2 视图函数模版

    def send_sms(self, request, *args, **kwargs):
        try:
            # 放心大胆写
        except Exception as e:
            raise e
        return APIResponse()

.
.
.
.
.

5 多方式登录接口

# 使用  用户名,手机号,邮箱+密码登录

# post--{username:[email protected],password:123}

5.1 视图类

class UserView(ViewSetMixin, GenericAPIView):
    serializer_class = UserLoginSerializer
    queryset = User.objects.all().filter(is_active=True)
    @action(methods=['POST'], detail=False)
    def login_mul(self, request, *args, **kwargs):
        '''
        把这个逻辑放在序列化类中
        1 取出前端传入的用户名和密码
        2 通过用户名和密码去数据库查询用户
        3 如果能查到,签发token
        4 返回给前端登录成功
        '''
        # 实例化 序列化类对象时,可以传入context 字典     context 是 视图类和序列化类沟通的桥梁
        # 序列化类全局钩子,放入的
        # 有了序列化类对象,通过  对象.context 就可以拿到值
        ser = self.get_serializer(data=request.data)
        ser.is_valid(raise_exception=True)  # 执行这句话,会走字段自己的校验,局部钩子,全局钩子
        token = ser.context.get('token')  # ser.context是什么先不着急
        username = ser.context.get('username')
        return APIResponse(token=token, username=username)  # {code:100,msg:成功,token:aasdfa,username:lqz}

5.2 序列化类

from .models import User
from rest_framework import serializers
import re
from rest_framework.exceptions import APIException, ValidationError
from rest_framework_jwt.settings import api_settings

jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER


# 这个序列化类用来校验字段---不做序列化,也不做反序列化
class UserLoginSerializer(serializers.ModelSerializer):
    # 坑
    # 重写一下username,把原来的校验规则去掉
    username = serializers.CharField()

    class Meta:
        model = User
        # username 映射过来,是唯一的,字段自己的校验就过不了,所有要重写这个字段
        fields = ['username', 'password']  # 这个序列化类用来校验字段---不做序列化,也不做反序列化

    # 全局钩子
    def validate(self, attrs):
        '''
         把这个逻辑放在序列化类中
         1 取出前端传入的用户名和密码
         2 通过用户名和密码去数据库查询用户
         3 如果能查到,签发token
         4 返回给前端登录成功
        '''
        # attrs 是前端传入的数据,经过 字段自己校验和局部钩子校验过后的数据   {username:lqz,password:123}
        user = self._get_user(attrs)
        token = self._get_token(user)
        # 把用户名,和token放到ser的 context中
        self.context['token'] = token
        self.context['username'] = user.username
        return attrs

    # 在类内部,隐藏属性和方法, __ 开头
    # 公司里约定俗成,不用 __ ,使用 _ ,表示不想给外部用,但是实在想用,根据名字直接用
    def _get_user(self, attrs):
        username = attrs.get('username')
        password = attrs.get('password')
        if re.match(r'^1[3-9][0-9]{9}$', username):
            user = User.objects.filter(mobile=username).first()
        elif re.match(r'^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$', username):
            user = User.objects.filter(email=username).first()
        else:
            user = User.objects.filter(username=username).first()
        if user and user.check_password(password):
            return user
        else:
            # 用户不存在或密码错误   这里的代码,还是在全局钩子中执行,全局钩子校验失败,要抛异常,所以在这抛异常
            raise APIException('用户不存在或密码错误')

    def _get_token(self, user):
        payload = jwt_payload_handler(user)
        token = jwt_encode_handler(payload)
        return token

.
.
.
.
.

6 腾讯云短信申请

# 发送短信接口,借助于第三方短信平台,收费的
	-腾讯云短信
    -阿里 大于短信
    -。。。。

# 申请微信公众号:自己搜 实名认证


# 使用腾讯短信
	-https://cloud.tencent.com,微信扫码登录
    -搜索短信:https://console.cloud.tencent.com/smsv2
    - 创建短信签名:公众号注册,提交等待审核
	- 创建短信正文模版
	-等待审核
	-发送短信
    	python 代码法搜昂短信
        
        
        
        
 # API SDK
	-API: 咱们学习过的API接口,写起来比较麻烦,自己分析接口
    
    -SDK:集成开发工具包,分语言,java,python,go
    	-使用python 对api进行封装成包
        -以后我们只需要,安装包,导入包,包名.发送短信,传入参数,就可以发送了
    

   - 只要官方提供sdk,优先用sdk
		pip install tencentcloud-sdk-python

.
.
.
.
.

补充

# https://gitee.com/aeasringnar/django-RESTfulAPI/tree/master
# https://gitee.com/aeasringnar

.
.
.

作业

# 练习使用pycharm操作git
# 手机号是否存在
# 多方式登录接口

# 注册公众号
# 注册云短信,申请

# 使用python 测试发送短信

标签:username,git,短信,day07,---,路飞,token,user,序列化
From: https://www.cnblogs.com/tengyifan888/p/17176180.html

相关文章

  • 【copy from】IEEE-754 Floating Point Converter
    图片截取自:IEEE-754FloatingPointConverter传送门:https://www.h-schmidt.net/FloatConverter/IEEE754.htmlExponent:用移码表示(格式与补码类似,只是MSB用1表示正数,用......
  • 微信公众号跳转小程序 wx-open-launch-weapp,在vue3+vite中使用 (多个问题集锦)
    写这篇文章为了解决现在没有一个合集,所以我参考其他文档,及自己的测试最后得出完整的方案1.公众号后台关联小程序要求已认证的服务号,在服务号中关联要跳转的小程序配置......
  • jeecg-boot中导出excel冲突问题
    jeecg-boot自带的库是autopoi,如果自定义导出excel引入poi,则需要POI版本要保持一致,否则会出现冲突的情况,导致这2个都用不了的情况。Autopoi底层用的是POI库,poi-tl的底层也......
  • vm-集群初始化3节点搭建(node01、node02、node03)
    首先确保windows系统,对应的vmware 服务都是正常运行修改虚拟机对应的主机名字设置虚拟机的主机名,重启生效 reboot修改对应的配置hosts 配置文件,vim/etc/hosts关......
  • Anal 21-22 甲
    2021-2022数学分析(甲)I期末考试浙江大学      yuanhongyi答案仅供参考!\(1.计算题\)\((1)写出sinx带拉格朗日余项的麦克劳林展开式.\)\(sinx=x-\dfrac{1}......
  • 【linux系统安装】Anolis OS-龙蜥操作系统实机安装流程整理
    【安装准备】1、准备一个U盘,可储存空间不低于20G,U盘内资料移出去,待会儿要格式化做U盘启动盘2、windows操作系统上下载“Rufus”,官网:http://rufus.ie/zh/,制作U盘启动盘所......
  • 2023-03-03 js map 双重嵌套
    恩。。其实也没啥要记录的,记住关键一点就是必须要有return,不管是几重,比如:arr.map((item,index)=>{  return(    item.arr2.map((item2,index2)=>{......
  • vue-cli指定版本安装
    安装新的版本前,需要先把之前安装的版本卸载掉。vue卸载:npmuninstallvue-cli-g(3.0以下版本卸载)npmuninstall-g@vue/cli(3.0以上版本卸载)vue安装:npminstall-g@vue/cl......
  • DB-SQL
         ......
  • flink-综合练习
    案例需求:假设用户需要每个1秒钟需要统计4秒钟窗口中数据的量,然后对统计的结果值进行checkpoint处理数据规划使用自定义算子每秒钟产生大约10000条数据产生的数据为一......