目录
浅谈项目开发
-
企业的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 ~/.pip2、进入 .pip 隐藏文件夹并创建 pip.conf 配置文件 -- cd ~/.pip && touch pip.conf3、启动 Finder(访达) 按 cmd+shift+g 来的进入,输入 ~/.pip 回车进入4、新增 pip.conf 配置文件内容
- 配置文件内容
[global]index-url = http://pypi.douban.com/simple[install]use-mirrors = truemirrors = http://pypi.douban.com/simple/trusted-host = pypi.douban.com
- pycharm换源
链接地址:最新pycharm更换镜像源
- 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 virtualenvpip3 install -i https://pypi.douban.com/simple virtualenvwrapper## 第二步:找到virtualenvwrapper先找到virtualenvwrapper的工作文件 virtualenvwrapper.sh,该文件可以刷新自定义配置,但需要找到它MacOS可能存在的位置 /Library/Frameworks/Python.framework/Versions/版本号文件夹/binLinux可能所在的位置 /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/python3source /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 = TrueUSE_L10N = TrueUSE_TZ = False
- 创建app,默认习惯改改
1. 先切换路径到apps目录中 PS F:\synchro\Project\luffy> cd luffy/apps2. 执行创建app命令 PS F:\synchro\Project\luffy\luffy\apps> python ../../manage.py startapp user
- 配置文件中将 BASE_DIR 与 apps的路径添加到环境变量中
import osimport sysBASE_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_handlerdef 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'}
- 定义全局异常信息返回格式
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/143997.html