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

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

1|1为开源项目贡献代码

我们在github,gitee 看到好的开源项目,发现有bug或者为他增加新功能,如何做? # 步骤: 1 先fork开源项目--》复制这个项目到我的仓库中 2 clone下来,改代码,一路提交到远端(我的) git clone xxxx git push origin master 3 提交pr,等作者同意

image

image

1|2pycharm使用git

pycharm也能够使用git来操作一系列的命令,比在Git上面敲命令要简单方便的多,操作简洁方便容易。

image

image

image

image

image

image

1|3登录注册功能分析

# 接口分析 # 今天先练习 5 校验手机号是否存在的接口 1 多方式登录接口:用户名/手机号/邮箱 +密码都可以登录 # 后面做 2 发送手机验证码接口 (借助于第三方短信平台) 3 短信登录接口 4 注册接口

1|4手机号是否存在接口

1|0视图函数模版

def send_sms(self, request, *args, **kwargs): try: # 放心大胆写 except Exception as e: raise e return APIResponse()
零碎的知识点: 1.写继承类的时候,不要写ModelViewSet,因为它不需要验证就能够添加用户,漏洞太大了,不安全
url.py: from rest_framework.routers import SimpleRouter from . import views router = SimpleRouter() router.register('userinfo',views.UserView,'userinfo') urlpatterns = [ ] urlpatterns += router.urls
class UserView(GenericViewSet): @action(methods=['GET'],detail=False) def send_sms(self,request,*args,**kwargs): try: mobile = request.query_params.get('mobile') print(1) User.objects.get(mobile=mobile) except Exception as e: raise e return APIResponse(msg='手机号存在')

image

1|5多方式登录接口

1|0视图类

class UserView(GenericViewSet): queryset = User.objects.all().filter(is_active=True) serializer_class = UserLoginSerializer @action(methods=['GET'],detail=False) def send_sms(self,request,*args,**kwargs): try: mobile = request.query_params.get('mobile') print(1) User.objects.get(mobile=mobile) except Exception as e: raise e return APIResponse(msg='手机号存在') @action(methods=['POST'],detail=False) def login_mul(self,request,*args,**kwargs): # 实例化 序列化类对象时,可以传入context 字典 context 是 视图类和序列化类沟通的桥梁 # 序列化类全局钩子,放入的 # 有了序列化类对象,通过 对象.context 就可以拿到值 ser = self.get_serializer(data=request.data) # ser = UserLoginSerializer 两种方法都是可以的,这种方法只是为了让pychram提示 # 执行这句话,会走字段自己的校验,局部钩子,全局钩子 # raise_exception就是在校验失败的时候报错的作用 ser.is_valid(raise_exception=True) token = ser.context.get('token') username = ser.context.get('username') return APIResponse(token=token,username=username)

1|0序列化类

from rest_framework import serializers from .models import User import re from rest_framework.exceptions import APIException 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 = serializers.CharField() ''' 这里需要我们重新定义字段自己的校验 否则就会因为用户表中定义的时候,规定的唯一限制导致报错 unique=True ''' class Meta: model = User fields = ['username', 'password'] def validate(self, attrs): ''' 这里我们使用把校验逻辑放在序列化类中的方式实现多方式的登陆接口 1、取出前端传入的用户名和密码 2、通过用户名和密码去数据库查询对象 3、如果能查到,签发token 4、返回数据给前端 ''' user = self._get_user(attrs) token = self._get_token(user) 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'^[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

image

image

1|6腾讯云短信申请

# 发送短信接口,借助于第三方短信平台,收费的 -腾讯云短信 -阿里 大于短信 # 申请微信公众号:自己搜 要实名认证 # 使用腾讯短信 -https://cloud.tencent.com,微信扫码登录 -搜索短信:https://console.cloud.tencent.com/smsv2 - 创建短信签名:公众号注册,提交等待审核 - 创建短信正文模版 -等待审核 -发送短信 python 代码法搜昂短信
当前面两项申请成功后,我们就可以根据他提供的教程发送短信了 有API和SDK两种方式 # API SDK -API: 咱们学习过的API接口,写起来比较麻烦,自己分析接口 -SDK:集成开发工具包,分语言,java,python,go -使用python 对api进行封装成包 -以后我们只需要,安装包,导入包,包名.发送短信,传入参数,就可以发送了 - 只要官方提供sdk,优先用sdk pip install tencentcloud-sdk-python

__EOF__

本文作者泡芙有点甜
本文链接https://www.cnblogs.com/zx0524/p/17179135.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   小王应该在学习!  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示