补充
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