Loading

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. 客户定制
      3. 互联网项目
    • 流程

      * 1. 立项
           需求分析(产品经理, 技术人员) --> 产品原型 --> 前/后端
      * 2. 前端(根据原型图)
           ui前端 --> ui切图 --> 前端实现 
      * 3. 后端
           项目架构, 技术选型 --> 需求说明书, 原型图 --> 开发接口 --> 接口文档
      * 4. 前后端代码整合
           前后端联调 --> 继承测试(测试部, 质量控制部...)
      * 5. 上线
      
      工作流程: 公司项目管理平台(禅道...) --> 看自己的任务 --> 确定需求(询问测试, 询问发布任务的人员) 
      --> 写代码 --> 提交到git仓库 --> 管理平台将需求设置完成
      
      image
      image
    • 开发模式

      SCRUM官方权威指南:用于开发、交付和持续支持复杂产品的一个框架。

      瀑布模式: 早期被广泛采用的软件开发模型 --> 开发完在测试 --> 出问题在调试
      敏捷开发: 完成一个模块--> 测试 --> 上线 --> 下一个循环
      	 scrum --> Sprint周期(小功能从开发到完成的时间) -->1 周
      	 不做整体数据库的设计 --> 写到哪个模块,再去设计相关表
      
      image
  • 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
      
      image
    • 永久修改
      • 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
          image

          image

        • 2022.1版本后
          image

  • 创建虚拟环境

    • 创建背景

      同一个版本的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中搭建

      image

    • windows系统中搭建

      • 常见命令
        1. 创建项目
           命令: mkvirtualenv -p python3.8 虚拟环境名字  
        
        2. 查看创建的虚拟环境
           命令: workon
           
        3. 使用虚拟环境
           workon 虚拟环境名字  
        
        4. 进入|退出 虚拟环境的Python环境
          python | exit()
          
        5. 为虚拟环境安装模块(已经进入到虚拟环境中)
           pip install 模块名
        
        6. 退出当前虚拟环境
           deactivate
           
        7. 删除虚拟环境 (删除当前虚拟环境要先退出, 也可以直接找到项目文件夹删除)
           rmvirtualenv 虚拟环境名字
        
      • 安装依赖的模块

        建议安装的时候换个源,太慢了, 安装完,在script文件夹下就会有virtualenv.exevirtualenvwrapper.bat批处理文件

        pip install virtualenv  虚拟环境模块: 创建虚拟环境麻烦 搭配↓
        pip install virtualenvwrapper-win  虚拟环境辅助模块: 更快捷方便的操作和管理虚拟环境
        
      • 建立项目存放目录
        在D盘下创建一个Virtualenvs文件夹
        
      • 配置环境变量
        变量名 WORKON_HOME
        变量值 D:\Virtualenvs
        
        image
      • 配置信息同步
        找到安装Python的目录, 打开Script目录 以管理员身份运行virtualenvwrapper.bat文件
        执行一闪而过, 看不到什么信息的
        
        image
      • 创建虚拟环境项目
        mkvirtualenv -p python3.8 虚拟环境名称
        image
      • 查看虚拟环境的文件
        workon
        image
      • 进入虚拟环境
        workon luffy
      • 测试
        pip install django==2.2.14
        image
    • 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    项目依赖的模块
      
      image
    • 修改控制台文件manage.py
      直接使用settings/dve.py的配置文件, 在配置中.文件名即可, 不需要后缀
           os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy.settings.dev')
      
      image
    • 启动按钮重新配置(不修会出问题)
      PYTHONUNBUFFERED=1; DJANGO_SETTINGS_MODULE=luffy.settings.dev
      
      image
    • 启动项目, 启动项目之后会生成sqlite3的数据库文件, 不需要可以删除!
      image
    • wsgi.py文件中配置
      image
    • 国际化设置(在两个配置文件中设置)
      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
      
      image
    • 配置文件中将 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 添加到环境变量中.
      """
      
      image
      环境变量的使用场景
      在导入文件的时候, 导入路径越短越好, 
      如果导入的路径中经过py文件会执行该文件, 路径过长可能会出问题(循环导入...)
      在py文件中使用绝对路径与相对路径 .与.. 导入模块的后, 该文件只能直接运行, 只能够被其他的文件调用.
      
      image
    • 注册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)
      
  • 全局异常配置

    • 定义全局异常信息返回格式
      # 调用内置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'
      }
      
posted @ 2022-11-15 00:49  爱learn  阅读(25)  评论(0编辑  收藏  举报