首页 > 其他分享 >路飞项目,为开源项目贡献代码,pycharm使用git,登录注册功能分析,手机号是否存在接口,多方式登录接口,腾讯云短信申请

路飞项目,为开源项目贡献代码,pycharm使用git,登录注册功能分析,手机号是否存在接口,多方式登录接口,腾讯云短信申请

时间:2023-03-06 23:57:27浏览次数:41  
标签:username git 短信 登录 功能分析 接口 token user 序列化

内容回顾

git常用命令

git init 初始化

git status  查看文件修改

git add .	提交更换数据到暂存区

git commit -m '注释' 把暂存区数据提交到版本库

git log

git reflog

git push 远程仓库名 分支名

git pull 远程仓库名 分支名

git reset HEAD

git reset --hard 版本号

设置用户名邮箱局部设置,也就是当前使用项目
git config user.name=
git config user.email=           
加上--global 就是设置全局


版本管理软件 git svn

git 分布式管理

svn集中式管理

git安装:相应平台软件,下载完成,一路next,然后就可以愉快的使用git了

git 工作流程

工作区

暂存区

版本库

远程仓库

忽略文件

.gitignore

然后文件内写

要忽略的内容

分支管理

git branch          	查看分支

git branch 分支名		  创建分支

git check 分支名		  切换分支

git merge 分支名		  分支合并

远程仓库

	-远程:创建仓库,空仓库
    -本地:
    	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  # 每次提交代码之前先拉

git clone 地址

开发者,项目已经有了,需要克隆下来

git clone 开源项目地址

ssh 操作远程仓库

公钥私钥

公钥配置在gitee上,以后使用ssh推送代码,就不要验证

git remote add 自己设置远程名 远程仓库地址

冲突

多人在同一分支工作,在提交时可能发送冲突

分支合并时,可能发生冲突

线上分支合并

我们负责提交pr由领导进行审核解决冲突后合并代码

远程仓库回顾(不要亲自使用)

内容详细

github ,gitee看到好的开源项目,发现有bug,为它增加新功能》我们加入代码》想合并进开源项目

步骤

先fork开源项目》复制这个项目到我的仓库

clone下来,改代码,一路提交到远端(自己的)

提交pr等作者同意即可

pycharm使用git

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

先配置pycharm使用git

image-20230303100202661

image-20230303095408897

image-20230303095542916

image-20230303095614690

image-20230303095712512

image-20230303095927399

image-20230303100341245

image-20230303100439931

image-20230303100555402

image-20230303100649080

登录注册功能分析

接口分析

5校验手机号是否存在

1多方式登录,用户名/手机号/邮箱+密码都可登录

2发送手机验证码接口(借助于第三方短信平台)

3短信登录接口

4注册接口

手机号是否存在接口

user>url.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

user>view.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='手机号存在')

视图函数模板

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

多方式登录

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

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

视图类

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}

序列化类

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

腾讯云短信申请

# 发送短信接口,借助于第三方短信平台,收费的
	-腾讯云短信
    -阿里 大于短信
    -。。。。
    
    
# 申请微信公众号:自己搜 实名认证 


# 使用腾讯短信
	-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

标签:username,git,短信,登录,功能分析,接口,token,user,序列化
From: https://www.cnblogs.com/clever-cat/p/17185975.html

相关文章