首页 > 其他分享 >Luffy项目:4、为开源项目贡献代码,pycharm操作Git,Luffy项目登录/注册功能分析,腾讯云短信申请

Luffy项目:4、为开源项目贡献代码,pycharm操作Git,Luffy项目登录/注册功能分析,腾讯云短信申请

时间:2023-03-05 12:35:10浏览次数:50  
标签:username 手机号 功能分析 项目 jwt token user Luffy import

目录

Luffy项目

一、如何为开源项目贡献代码

步骤:

不管是gitee还是gitbup上面开源出来的代码,都可以直接clone到自己的电脑上。在使用别人开源代码的时候,如果有自己不错的想法,或是发现了bug可以联系作者,进行贡献代码

1、先fork开源项目----》复制到自己的仓库中
2、clone下来,改代码,然后提交到自己的远程仓库
3、提交pr,并说明情况,等待作者同意

二、pycharm操作Git

一、配置Settings

img

二、基本使用


三、Luffy项目登录/注册功能分析

登录接口分析:

  • 常规登录:

    • 多方式登录接口(用户名/手机号/邮箱+密码)
  • 短信登录:

    • 校验手机号是否存在
    • 发送手机验证码(借助第三方平台发送短信)

1、验证手机号是否存在接口

思路:

  • 1、路由分发
  • 2、使用CBV、rest_framework框架,继承GenericViewSet
  • 3、使用action装饰器,映射路由
  • 4、前端GET请求,获取GET请求携带的参数,数据库中查询
  • 5、根据查询结果反馈api接口信息

views.py

class UserView(GenericViewSet):

    # 查询手机号是否存在接口
    @action(methods=['GET'], detail=False)
    def send_sms(self, request, *args, **kwargs):
        print(123)
        # 获取GET请求携带的mobile(手机号)
        mobile = request.query_params.get('mobile')
        try:
            # 根据手机号到数据库查询
            User.objects.get(mobile=mobile)
        # get方法查询不到就会报错(报错了就说明不存在该手机号)
        except Exception:
            # 走到这里说明手机号不存在
            return APIResponse(result='手机号不存在')
        # 走到这里就说明手机号存在(正常返回结果)
        return APIResponse(result='手机号存在')

urls.py

from rest_framework.routers import SimpleRouter
from user import views

router = SimpleRouter()
router.register('userinfo', views.UserView, 'user')
urlpatterns = [
]
urlpatterns += router.urls

2、多功能登录接口

思路:

  • 1、POST请求

  • 2、请求体携带参数

    • 用户名(username):携带的可能是手机号或邮箱或用户名
    • 密码(passowrd):携带密码
  • 3、使用序列化类,在序列化类中进行逻辑判断(查询用户),签发token

views.py

from rest_framework.viewsets import GenericViewSet
from rest_framework.decorators import action
from .models import User
from utils.common_response import APIResponse
from .UserLoginSerializers import UserLoginSerializer


class UserView(GenericViewSet):
    serializer_class = UserLoginSerializer
    queryset = User.objects.filter(is_active=True).all()

    # 登录接口
    @action(methods=['POST'], detail=False)
    def login(self, request, *args, **kwargs):
        # 执行序列化类
        ser = self.get_serializer(data=request.data)
        # 执行校验(字段校验,全局钩子)
        ser.is_valid(raise_exception=True)
        # 校验通过,获取user和token
        username = ser.context.get('user')
        token = ser.context.get('token')
        # 将数据返回给前端
        return APIResponse(msg='登录成功', username=username, token=token)

UserLoginSerializers.py

from rest_framework import serializers
from rest_framework.exceptions import APIException
from user.models import User
from user.common_jwt import jwt_encode
import re


class UserLoginSerializer(serializers.ModelSerializer):
    username = serializers.CharField()

    class Meta:
        model = User
        fields = ['username', 'password']

    # 全局钩子,校验用户是否存在
    def validate(self, attrs):
        # 写一个函数,专门用来校验登录
        user = self._get_user(attrs)
        # 走到这里说明用户校验通过,开始签发token
        token = jwt_encode(user)
        self.context['user'] = user.username
        self.context['token'] = token
        return attrs

    def _get_user(self, attrs):
        # 获取用户输入
        username = attrs.get('username')
        password = attrs.get('password')
        # 先默认为用户名进行校验
        try:
            # 取不到会走下方的异常
            user = User.objects.get(username=username)
        # 这里根据用户输入再次进行校验
        except:
            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()
        if user:
            user.check_password(password)
            return user
        raise APIException('用户名或密码错误')

jwt.py

import datetime
from rest_framework_jwt.settings import api_settings

jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER


def jwt_payload(user_obj):
    return {
        'user_id': user_obj.pk,
        'username': user_obj.username,
        'exp': datetime.datetime.utcnow() + datetime.timedelta(days=1)
    }


# 签发
def jwt_encode(user_obj):
    # 获取荷载
    payload = jwt_payload(user_obj)
    # 参数完整jwt签名
    token = jwt_encode_handler(payload)
    return token

四、腾讯云短信申请

1、申请微信公众号

网页搜索微信公众号平台:https://mp.weixin.qq.com/

申请步骤:

  • 1、点击订阅号
  • 2、按照要求输入,提交
  • 3、选择账号类型:订阅号
  • 4、主体类型:个人
  • 5、创建成功之后,更换头像和名称(刚注册成功之后,三天内名称不换则自动注销)

img

img

2、进入腾讯云创建签名管理和模板

网页搜索腾迅云官网

操作步骤:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

标签:username,手机号,功能分析,项目,jwt,token,user,Luffy,import
From: https://www.cnblogs.com/kangssssh/p/17180198.html

相关文章

  • 在idea创建一个maven项目,然后放在hive环境运行
    正常创建一个newmaven项目关于maven生命周期文档:https://www.runoob.com/maven/maven-build-life-cycle.html打包完毕后在target会出现打包好的jar包将jar包上传到......
  • day01-项目介绍+SSM环境搭建
    项目介绍+SSM环境搭建1.项目功能/界面SSM整合项目界面:使用Vue完成技术栈:前后端分离开发,前端框架Vue3+后端框架SSM前端框架-Vue3后端框架-SSM(SpringMVC+Spring+MyBat......
  • 【喜报】高科技PCB行业排头兵企业S/4HANA 1709拆分项目成功上线
    2023年2月20日,SNP与金牌合作伙伴–上海翰耐信息科技有限公司一起合作的高科技行业某客户S/4HANA1709拆分项目成功上线。此项目为SNP中国的又一单S/4拆分项目。祝贺中国......
  • 项目 关键路径 的
    根据《项目各模块依赖关系及持续时间表》(项目表),转换为《项目网络活动图》(活动图)活动节点说明最早开始时间ES工期DU最早结束时间EF 活动名称 最晚开始......
  • SpringBoot 项目集成 knife4j
    文档地址:https://doc.xiaominfo.com/knife4j是为JavaMVC框架集成Swagger生成\(Api\)文档的增强解决方案。Swagger介绍前后端分离开发模式中,api文档是最好的沟通......
  • 系统集成项目管理工程师(中级) -- 项目管理(二)
    一、单个项目的管理过程(1)启动过程组的主要任务是确定并核准项目或项目阶段。在项目开始阶段,启动过程的主要成果就是形成一个项目章程和选择一位项目经理。(2)规划过程组的......
  • 基于Docker安装项目管理工具禅道
    禅道是通用的项目管理软件完整支持敏捷项目模型、瀑布项目模型、看板模型内置项目集、产品、项目和执行四个管理框架支持CMMI标准的落地实施下载镜像dockerpulle......
  • 为开源项目贡献代码,pycharm使用git,登录注册功能分析,手机号是否存在接口,多方式登录
    为开源项目贡献代码,pycharm使用git,登录注册功能分析,手机号是否存在接口,多方式登录接口,腾讯云短信申请为开源项目贡献代码我们在github,gitee看到好的开源项目,发现......
  • java项目自动化单元测试
    对于我们开发人员来说,单元测试一定不会陌生,但在各种原因下会被忽视,尤其是在我接触到的项目中,提测阶段发现各种各样的问题,我觉得有必要聊一下单元测试。为了写而写的单元测......
  • Java Swing项目使用Idea UI Designer设计插件无法启动问题解决方案
    起因最近整理一下以前写的swing项目,结果发现跑不起来了,具体表现为与视图表绑定的Java类的各属性为NULL(插件没有初始化绑定的类对象),导致项目无法启动。(报空指针异常)问题排......