Web开发前奏
浅谈项目开发
-
企业的web项目类型
1. 商城 (某某团购) 1.1 B2C直销商城 商家与会员直接交易(Busioness To Customer) 1.2 B2B批发商城 商家与商家直接交易 1.3 B2B2C购物平台 商家和会员在另一个商家提供的平台上进行交易 1.4 C2B定制商城 会员向商家发起定制商品的需求, 商家去完成 1.5 O2O线上线下交易平台 1.6 C2C二手交易平台 2. 门户网站[企业网站和门户网站] 3. 社交网络 (APP后端) 4. 咨询论坛 (技术, 买资料) 5. 内部系统 (办公管理, 人事管理, 客户关系管理) 6. 个人博客 7. 内容收费
-
企业项目开发流程
👉立项可以参考此博文:立项管理
-
项目来源
- 公司需求
- 客户定制
- 互联网项目
-
流程
* 1. 立项 需求分析(产品经理, 技术人员) --> 产品原型 --> 前/后端 * 2. 前端(根据原型图) ui前端 --> ui切图 --> 前端实现 * 3. 后端 项目架构, 技术选型 --> 需求说明书, 原型图 --> 开发接口 --> 接口文档 * 4. 前后端代码整合 前后端联调 --> 继承测试(测试部, 质量控制部...) * 5. 上线 工作流程: 公司项目管理平台(禅道...) --> 看自己的任务 --> 确定需求(询问测试, 询问发布任务的人员) --> 写代码 --> 提交到git仓库 --> 管理平台将需求设置完成
-
开发模式
SCRUM官方权威指南:用于开发、交付和持续支持复杂产品的一个框架。
瀑布模式: 早期被广泛采用的软件开发模型 --> 开发完在测试 --> 出问题在调试 敏捷开发: 完成一个模块--> 测试 --> 上线 --> 下一个循环 scrum --> Sprint周期(小功能从开发到完成的时间) -->1 周 不做整体数据库的设计 --> 写到哪个模块,再去设计相关表
-
-
pip换源
- 哪些源可以换
直接通过pip访问的是外网, 速度慢. 将pip的访问地址换成国内的地址, 加快下载模块的速度. 国内一些机构对Python官网的模块进行了备份. 国内五大源: 阿里云 https://mirrors.aliyun.com/pypi/simple/ 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
- 临时修改
pip install xxx -i 地址
eg:
pip install pymysql -i http://pypi.douban.com/simple
- 永久修改
- Windows
""" 1、文件管理器文件路径地址栏敲:%APPDATA% 回车,快速进入 C:\Users\用户\AppData\Roaming 文件夹中 2、新建 pip 文件夹并在文件夹中新建 pip.ini 配置文件 3、新增 pip.ini 配置文件内容 """
- MacOS、Linux
1、在用户根目录下 ~ 下创建 .pip 隐藏文件夹,如果已经有了可以跳过 -- mkdir ~/.pip 2、进入 .pip 隐藏文件夹并创建 pip.conf 配置文件 -- cd ~/.pip && touch pip.conf 3、启动 Finder(访达) 按 cmd+shift+g 来的进入,输入 ~/.pip 回车进入 4、新增 pip.conf 配置文件内容
- 配置文件内容
[global] index-url = http://pypi.douban.com/simple [install] use-mirrors = true mirrors = http://pypi.douban.com/simple/ trusted-host = pypi.douban.com
- pycharm换源
链接地址:最新pycharm更换镜像源
-
旧版pycharm
-
2022.1版本后
-
- Windows
- 哪些源可以换
-
创建虚拟环境
-
创建背景
同一个版本的Python建立的项目只能对应一个版本的模块. 例: 项目1, python3.6 使用 django1.x (运行项目2之后运行项目1, 需要卸载django2.x, 重装django1.x) 项目2, python3.6 使用 django2.x (运行项目1之后运行项目2, 需要卸载django1.x, 重装django2.x) 在开发多个软件的时候, 使用的模块版本不同则需要重新下载安装. 使用虚拟环境的好处: 不同的应用, 开发环境相互独立, 环境升级不影响其他应用, 也不会影响全局的Python环境. 防止出现包管理混乱及包版本冲突.
-
pycharm中搭建
-
windows系统中搭建
- 常见命令
1. 创建项目 命令: mkvirtualenv -p python3.8 虚拟环境名字 2. 查看创建的虚拟环境 命令: workon 3. 使用虚拟环境 workon 虚拟环境名字 4. 进入|退出 虚拟环境的Python环境 python | exit() 5. 为虚拟环境安装模块(已经进入到虚拟环境中) pip install 模块名 6. 退出当前虚拟环境 deactivate 7. 删除虚拟环境 (删除当前虚拟环境要先退出, 也可以直接找到项目文件夹删除) rmvirtualenv 虚拟环境名字
- 安装依赖的模块
建议安装的时候换个源,太慢了, 安装完,在script文件夹下就会有
virtualenv.exe
和virtualenvwrapper.bat
批处理文件pip install virtualenv 虚拟环境模块: 创建虚拟环境麻烦 搭配↓ pip install virtualenvwrapper-win 虚拟环境辅助模块: 更快捷方便的操作和管理虚拟环境
- 建立项目存放目录
在D盘下创建一个Virtualenvs文件夹
- 配置环境变量
变量名 WORKON_HOME 变量值 D:\Virtualenvs
- 配置信息同步
找到安装Python的目录, 打开Script目录 以管理员身份运行virtualenvwrapper.bat文件 执行一闪而过, 看不到什么信息的
- 创建虚拟环境项目
mkvirtualenv -p python3.8 虚拟环境名称
- 查看虚拟环境的文件
workon
- 进入虚拟环境
workon luffy
- 测试
pip install django==2.2.14
- 常见命令
-
linux系统中搭建
# mac和linux ## 第一步安装 pip3 install -i https://pypi.douban.com/simple virtualenv pip3 install -i https://pypi.douban.com/simple virtualenvwrapper ## 第二步:找到virtualenvwrapper 先找到virtualenvwrapper的工作文件 virtualenvwrapper.sh,该文件可以刷新自定义配置,但需要找到它 MacOS可能存在的位置 /Library/Frameworks/Python.framework/Versions/版本号文件夹/bin Linux可能所在的位置 /usr/local/bin | ~/.local/bin | /usr/bin 建议不管virtualenvwrapper.sh在哪个目录,保证在 /usr/local/bin 目录下有一份 如果不在 /usr/local/bin 目录,如在 ~/.local/bin 目录,则复制一份到 /usr/local/bin 目录 -- sudo cp -rf ~/.local/bin/virtualenvwrapper.sh /usr/local/bin ### 第三步:配置环境变量 # 在 ~/.bash_profile 完成配置,virtualenvwrapper的默认默认存放虚拟环境路径是 ~/.virtualenvs # WORKON_HOME=自定义存放虚拟环境的绝对路径,需要自定义就解注 VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3 source /usr/local/bin/virtualenvwrapper.sh # 在终端让配置生效: -- source ~/.bash_profile
-
-
重构项目目录
- 规划
luffy 项目名 |--logs/ 项目运行事/开发时 的日志目录 -包 |--script/ 项目临时使用脚本文件目录 |--doc/ 存放项目介绍信息 |--readme.md 项目说明 |--luffy/ 项目主应用, 开发时代码存放的目录 -包 |--urls.py 总路由文件 |--wsgi.py Web服务器网关接口 |--utils/ 多个模块, 子应用的公共函数类库, 自己开发的组件 |--apps/ 开发者的代码存放的目录, 以子应用为目录 -包 |--libs/ 第三类/库存放目录, 第三方组件, 模块, 包 |--settings/ 配置目录 |--dve.py 项目来发是本地配置文件 |--prod.py 项目上线是运行的配置文件 |--requirement.txt 项目依赖的模块
- 修改控制台文件manage.py
直接使用settings/dve.py的配置文件, 在配置中.文件名即可, 不需要后缀 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy.settings.dev')
- 启动按钮重新配置(不修会出问题)
PYTHONUNBUFFERED=1; DJANGO_SETTINGS_MODULE=luffy.settings.dev
- 启动项目, 启动项目之后会生成sqlite3的数据库文件, 不需要可以删除!
- wsgi.py文件中配置
- 国际化设置(在两个配置文件中设置)
LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/shanghai' USE_I18N = True USE_L10N = True USE_TZ = False
- 创建app,默认习惯改改
1. 先切换路径到apps目录中 PS F:\synchro\Project\luffy> cd luffy/apps 2. 执行创建app命令 PS F:\synchro\Project\luffy\luffy\apps> python ../../manage.py startapp user
- 配置文件中将 BASE_DIR 与 apps的路径添加到环境变量中
import os import sys BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0, BASE_DIR) sys.path.insert(1, os.path.join(BASE_DIR, 'apps')) """ BASE_DIR是配置文件的上一级上一个文件夹 项目名文件夹. 将项目名文件夹与 其子目录apps 添加到环境变量中. """
环境变量的使用场景 在导入文件的时候, 导入路径越短越好, 如果导入的路径中经过py文件会执行该文件, 路径过长可能会出问题(循环导入...) 在py文件中使用绝对路径与相对路径 .与.. 导入模块的后, 该文件只能直接运行, 只能够被其他的文件调用.
- 注册app
# app应用列表 INSTALLED_APPS = [ ... 'user', # 将apps添加到环境变量之后, 导入应用是能够直接找到user app ]
- 规划
-
日志配置
- 在dev.py中添加日志模块的配置字典(Django官网提供的)
# 字典, 日志的配置信息 LOGGING = { # 版本 'version': 1, # 禁用现有的记录器 'disable_existing_loggers': False, # 日志的格式(定义两个不同的格式) 'formatters': { # 详细的版本 'verbose': { 'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s' }, # 简单的版本 'simple': { 'format': '%(levelname)s %(module)s %(lineno)d %(message)s' }, }, # 过滤日志 'filters': { 'require_debug_true': { '()': 'django.utils.log.RequireDebugTrue', }, }, # 显示 'handlers': { # 打印到终端的日志 'console': { # 实际开发建议使用WARNING 'level': 'DEBUG', # 级别 'filters': ['require_debug_true'], 'class': 'logging.StreamHandler', 'formatter': 'simple' # 使用的格式 }, # 写入到文件 'file': { # 实际开发建议使用ERROR 'level': 'ERROR', # 级别 'class': 'logging.handlers.RotatingFileHandler', # 日志位置, 日志文件名, 日志保存目录必须手动创建, 注:BASE_DIR是项目名目录 'filename': os.path.join(os.path.dirname(BASE_DIR), "logs", "luffy.log"), # 日志文件的最大值,这里我们设置300M 'maxBytes': 300 * 1024 * 1024, # 日志文件的数量,设置最大日志数量为10 'backupCount': 10, # 日志格式:详细格式 'formatter': 'verbose', # 文件内容编码 'encoding': 'utf-8' }, }, # 日志对象 'loggers': { 'django': { # 将日志打印到终端 并 写入到文件 'handlers': ['console', 'file'], 'propagate': True, # 是否让日志信息继续冒泡给其他的日志处理系统 }, } }
- 在utils.py 新建logger.py模块, 模块中生成日志对象, 方便以后的调用.
# 导入logging模块 import logging # 模块通过getLogger方法拿到配置文件中日志配置字段的loggers的django配置, 生成一个logging对象 log = logging.getLogger('django')
- 在异常响应中记录日志
# 导入日志对象 from .logger import log # 记录日志 log.error(err)
- 在dev.py中添加日志模块的配置字典(Django官网提供的)
-
全局异常配置
- 定义全局异常信息返回格式
# 调用内置exception_handler异常处理模块处理三大认证的异常. # 调用自定义Response对象ResponseDataFormat统一返回的数据格式. from rest_framework.views import exception_handler def exception_response(exc, context): # 调用内置的异常处理模块, 接收返回值 response = exception_handler(exc, context) # 判断返回的数据是否被内部的异常模块处理过(没有处理过返回None, 处理过返回的是一个response对象, 错误提示data属性中) if response: data = response.date.get('detail') else: data = str(exc) # 可以通过isinstance(exc, 错误类型) 对异常进行细分, 就不细分了, exc是一个错误类型的子对象 return ResponseDataFormat(code=400, msg='访问失败', data=data)
- 在dev.py配置文件中配置全局使用的异常处理模块
# 配置全局使用的异常处理程序 REST_FRAMEWORK = { 'EXCEPTION_HANDLER': 'luffy.utils.api_response.exception_response' }
- 定义全局异常信息返回格式