85、线上分支合并、远程仓库回滚、为开源项目贡献代码、git工作流、git pull和git fetch、变基、手机号是否存在接口、腾讯云短信申请

235 阅读5分钟

补充

1.分析方案:
	1.主分支:main、master
  2.开发分支:dev
  3.bug分支
2.在git上创建的仓库是空仓库。如果创建非空仓库,需要把本地仓库中的.git删除,把克隆下来的远程仓库所有东西复制到本地仓库内部,继续操作才可以

线上分支合并

1.本地分支合并---->git merge dev
2.有主分支---->开发分支开发完了---->合并到主分支
3.合并分支的两种方式:
	1.本地分支合并
  2.线上分支合并
3.线上分支合并情况
	1.远端创建dev分支--->本地没有,拉去一下就有了 git pull origin dev
  2.本地创建dev分支--->远端没有,推送一下就有了 git push origin dev

远端创建dev分支

1.在远端网页中点点点创建分支
2.本地:git pull origin dev
3.切换过去才能看到:git checkout dev

本地创建dev分支

1.本地的dev分支,删除东西
2.提交到本地版本库
3.推送到远程  git push origin dev

远程分支合并

1.组员新建pull request:可以叫做:pr或者mr(merge request)
2.组长审核--->同意--->dev就被合并到master

远程仓库回滚

1.远程仓库回滚-->不要做(不要强行合并:git push origin master -f)
2.操作
	1.git reset --hard 最初状态
  	git reset --hard fa7f8aee3aa6d39ce96ef97b57f12dfb51d3a23d

ps:本地代码要提交,本地版本库的内容必须是最新的,git pull 就是最新

为开源项目贡献代码

1.在gitee上找一个开源项目
2.点 fork--->复制一份到你的仓库中
3.在自己的仓库中,clone--->修改代码--->提交代码--->自己仓库
	git add . 
  git commit -m '加了点东西'
  git push origin main
4.在自己仓库中提交pr--->我们本地dev分支申请提交到作者的dev分支
5.等作者审核过,同意,你就是贡献者了

git工作流、git pull和git fetch、变基

1.git工作流:git flow--->分支方案
	-小公司一般没有采用
    
    
2.git pull和git fetch
	1.git pull 从远程仓库拉取代码:从远程获取最新版本并merge到本地
	2.git fetch 从远程仓库拉取代码:会将数据拉取到本地仓库 - 它并不会自动合并或修改当前的工作
	ps:git pull =git fetch +merge
    
3.变基 rebase
	1.多个提交记录整合成一个
	2.解决多次合并分叉问题
	

pycharm操作git

ps:实际开发中,可以完全一点命令都不敲,通过pycharm 点点点
1.pycharm 配置好git
	File-->Settings-->Git-->在Path to Git executable输入框些git可执行文件所在的路径
  git可执行文件所在的路径:which git-->/usr/bin/git

2.clone 代码
	项目/文件-->鼠标右键--->Git--->clone
 
3.git add 命令
	项目/文件-->鼠标右键--->Git--->Add

4.git commit 
	项目/文件-->鼠标右键--->Git--->Commit
  
5.git push
	项目/文件-->鼠标右键--->Git--->push
  
6.git 分支操作
	右下角-->main\dev

7.实用的,代码对比-->左下角
	git reflog 
  git log 命令

登陆注册页面分析

1.根据原型图分析出:要写的功能
	1.用户名密码登录接口
  2.注册功能接口
  3.手机号验证码登录接口
  4.发送短信验证码接口
  5.验证手机号是否存在接口

验证手机号是否存在接口

方式一

class UserView(ViewSet):
    @action(methods=['GET'], detail=False)
    def check_mobile(self, request, *args, **kwargs):
        user_mobile = request.query_params.get('mobile')
        if user_mobile:
            user_obj = User.objects.filter(mobile=user_mobile).first()
            if user_obj:
                return APIResponse(mag='手机号存在')
            else:
                return APIResponse(code=101, mag='手机号不存在')
        else:
            return APIResponse(code=102, mag='手机号没有传')

方式二

from rest_framework.viewsets import ViewSet
from rest_framework.decorators import action
from .models import User
from rest_framework.exceptions import APIException
class UserView(ViewSet):
    @action(methods=['GET'], detail=False)
    def check_mobile(self, request, *args, **kwargs):
        user_mobile = request.query_params.get('mobile')
        if user_mobile:
            user_obj = User.objects.filter(mobile=user_mobile).first()
            if user_obj:
                return APIResponse(mag='手机号存在')
        raise APIException('手机号不存在')

方式三

from rest_framework.viewsets import ViewSet
from rest_framework.decorators import action
from .models import User
from rest_framework.exceptions import APIException
class UserView(ViewSet):
    @action(methods=['GET'], detail=False)
    def check_mobile(self, request, *args, **kwargs):
        user_mobile = request.query_params.get('mobile',None)
        try:
            if user_mobile:
                user_obj = User.objects.get(mobile=user_mobile)   # # 有且只有一条才不报错,如果没有或多余一条,就报错
                return APIResponse(mag='手机号存在')
        except Exception as e:
            raise APIException('手机号不存在')
from .views import UserView
from rest_framework.routers import SimpleRouter
router = SimpleRouter()
router.register('userinfo',UserView,'userinfo')

urlpatterns = [

]
urlpatterns +=router.urls

补充

1.以后所有项目路径中不要带中文,计算名也不要是中文
2.有时候从git拉下来的代码,打开,运行不了
		.idea--->把它删掉,重新打开项目即可
    
    
3.git 写了忽略文件
	一开始没写,已经提交了很多了,后来又想忽略掉,如何操作?
  1.把那个文件删掉,提交,再push上去
  2.在忽略文件中加入文件
  3.创建不想被管理的文件
    

腾讯云短信申请

1.发送短信功能
	网上会有第三方短信平台,为我们提供api,花钱,向它的某个地址发送请求,携带手机号,内容--->它替我们发送短信 
  腾讯云短信--->以这个为例
  阿里 大于短信
  容联云通信
    
2.申请一个公众号
	文档:https://kf.qq.com/faq/120911VrYVrA151009JB3i2Q.html

3.如何申请腾讯云短信
	1.地址:https://cloud.tencent.com/act/pro/csms
	2.登录后,进入控制台,搜短信https://console.cloud.tencent.com/smsv2
	3.创建签名:使用公众号
	4.身份证,照片
	5.模板创建
	6. 发送短信
		使用腾讯提供的sdk发送
		https://cloud.tencent.com/document/product/382/43196

作业

手机号(用户名,邮箱)密码登录接口+手机号是否存在接口

from rest_framework.viewsets import ViewSet
from rest_framework.decorators import action
from .models import User
from rest_framework.exceptions import APIException
import re
from utils.common_logger import logger
import json
class UserView(ViewSet):
    @action(methods=['GET'], detail=False)
    def check_mobile(self, request, *args, **kwargs):
        user_mobile = request.query_params.get('mobile',None)
        try:
            if user_mobile:
                user_obj = User.objects.get(mobile=user_mobile)   # # 有且只有一条才不报错,如果没有或多余一条,就报错
                return APIResponse(mag='手机号存在')
        except Exception as e:
            raise APIException('手机号不存在')

    @action(methods=['POST'], detail=False)
    def login(self, request, *args, **kwargs):
        print(request.data)
        user_info = request.data.get('username')
        user_password = request.data.get('password')
        # print(user_info)
        if re.findall(r'^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$', user_info):
            # 邮箱
            user_obj = User.objects.filter(email=user_info).first()

        elif re.findall(r'^[1][3,4,5,6.7,8,9][0-9]{9}$',user_info):
            print(11)
            # 手机号
            user_obj = User.objects.filter(mobile=user_info).first()

        else:

            # 用户名
            user_obj = User.objects.filter(username=user_info).first()
        if user_obj:
            is_right = user_obj.check_password(user_password)
            if is_right:
                return APIResponse(msg='登陆成功')
            raise APIException('用户名或密码错误')
        raise APIException('用户不存在')
from django.urls import path
from .views import UserView
from rest_framework.routers import SimpleRouter
router = SimpleRouter()
router.register('userinfo',UserView,'userinfo')

urlpatterns = [

]
urlpatterns +=router.urls