""" 一、業務邏輯:登陸註冊 - 主頁(基礎信息展現) - 課程頁(複雜信息展現)- 課程訂單生產與支付 - 上線訂單生成 二、實際項目開發的技術點: git版本控制 第三方短信認證 接口緩存 - redis數據庫 celery異步任務,接口緩存異步同步數據 支付寶支付 真實服務器項目上線 三、前臺:頁面現成的、先後臺的數據交互代碼、element-ui、jq、bootstrap、原生 """
""" 一、採用國內源,加速下載模塊的速度 二、經常使用pip源: -- 豆瓣:https://pypi.douban.com/simple -- 阿里:https://mirrors.aliyun.com/pypi/simple
_清華源:https://pypi.tuna.tsinghua.edu.cn/simple/ 三、加速安裝的命令: -- >: pip install -i https://pypi.douban.com/simple 模塊名 """
全局配置,不僅是在pycharm裏換,這樣之後在終端也會執行換源後的鏡像來加載。python
""" 一、文件管理器文件路徑地址欄敲:%APPDATA% 回車,快速進入 C:\Users\電腦用戶\AppData\Roaming 文件夾中 二、新建 pip 文件夾並在文件夾中新建 pip.ini 配置文件 三、新增 pip.ini 配置文件內容 """
""" 一、在用戶根目錄下 ~ 下建立 .pip 隱藏文件夾,若是已經有了能夠跳過 -- mkdir ~/.pip 二、進入 .pip 隱藏文件夾並建立 pip.conf 配置文件 -- cd ~/.pip && touch pip.conf 三、啓動 Finder(訪達) 按 cmd+shift+g 來的進入,輸入 ~/.pip 回車進入 四、新增 pip.conf 配置文件內容 """
複製到新建的pip.ini 配置文件 便可。mysql
""" [global] index-url = http://pypi.douban.com/simple [install] use-mirrors =true mirrors =http://pypi.douban.com/simple/ trusted-host =pypi.douban.com """
爲何要使用虛擬環境? git
優勢redis
1、使不一樣應用開發環境相互獨立 2、環境升級不影響其餘應用,也不會影響全局的python環境 三、防止出現包管理混亂及包版本衝突
安裝sql
# 建議使用pip3安裝到python3環境下 pip3 install virtualenv pip3 install virtualenvwrapper-win
添加到環境變量數據庫
# 配置環境變量: # 控制面板 => 系統和安全 => 系統 => 高級系統設置 => 環境變量 => 系統變量 => 點擊新建 => 填入變量名與值 變量名:WORKON_HOME 變量值:自定義存放虛擬環境的絕對路徑 eg: WORKON_HOME: D:\Virtualenvs # 同步配置信息: # 去向Python3的安裝目錄 => Scripts文件夾 => virtualenvwrapper.bat => 雙擊 加載
安裝django
# 建議使用pip3安裝到python3環境下 pip3 install -i https://pypi.douban.com/simple virtualenv pip3 install -i https://pypi.douban.com/simple 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
# 在終端工做的命令 # 一、建立虛擬環境到配置的WORKON_HOME路徑下 # 選取默認Python環境建立虛擬環境: -- mkvirtualenv 虛擬環境名稱 # 基於某Python環境建立虛擬環境: -- mkvirtualenv -p python2.7 虛擬環境名稱 -- mkvirtualenv -p python3.6 虛擬環境名稱 # 二、查看已有的虛擬環境 -- workon # 三、使用某個虛擬環境 -- workon 虛擬環境名稱 # 四、進入|退出 該虛擬環境的Python環境 -- python | exit() # 五、爲虛擬環境安裝模塊 -- pip或pip3 install 模塊名 # 六、退出當前虛擬環境 -- deactivate # 七、刪除虛擬環境(刪除當前虛擬環境要先退出) -- rmvirtualenv 虛擬環境名稱
環境建立element-ui
""" 爲luffy項目建立一個虛擬環境 >: mkvirtualenv luffy """ """ 按照基礎環境依賴 >: pip install django==2.0.7 >: pip install djangorestframework >: pip install pymysql """
在cmd終端執行命令,建立名爲luffy的虛擬環境bootstrap
在此虛擬環境之下安裝一些項目依賴的模塊windows
在次虛擬環境下建立django項目:luffyapi
""" 前提:在目標目錄新建luffy文件夾 >: cd 創建的luffy文件夾 >: django-admin startproject luffyapi 開發:用pycharm打開項目,並選擇提早備好的虛擬環境 """
""" ├── luffyapi ├── logs/ # 項目運行時/開發時日誌目錄 - 文件夾 ├── manage.py # 腳本文件 ├── luffyapi/ # 項目主應用,開發時的代碼保存 - 包 ├── apps/ # 開發者的代碼保存目錄,以模塊[子應用]爲目錄保存 - 包 ├── libs/ # 第三方類庫的保存目錄[第三方組件、模塊] - 包 ├── settings/ # 配置目錄 - 包 ├── dev.py # 項目開發時的本地配置 └── prod.py # 項目上線時的運行配置 ├── urls.py # 總路由 └── utils/ # 多個模塊[子應用]的公共函數類庫[本身開發的組件] └── scripts/ # 保存項目運營時的腳本文件 - 文件夾 """
""" 1.修改 wsgi.py 與 manage.py 兩個文件: os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffyapi.settings.dev') 2.將settings.py刪除或更名,內容拷貝到settings/dev.py中 3.修改dev.py文件內容 LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' USE_TZ = False 4.修改啓動配置:見插圖 5.在任何一個__init__.py文件中測試默認配置文件是不是dev.py文件 from django.conf import settings print(settings) """
啓動Django環境的配置改成setings.dev
注意事項:
新建settings文件下,新建的的dev和prod文件的配置,開發前和上線後的修改,在相應的wsig.py和manage.py修改。
manage.py
wsig.py
# 官網:https://docs.djangoproject.com # 中文loggin配置:https://docs.djangoproject.com/zh-hans/2.2/topics/logging/ # 在項目的 dev.py 中配置 Django 項目的log日誌,那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': { 'level': 'DEBUG', 'filters': ['require_debug_true'], 'class': 'logging.StreamHandler', 'formatter': 'simple' }, 'file': { # 實際開發建議使用WARNING 'level': 'INFO', 'class': 'logging.handlers.RotatingFileHandler', # 日誌位置,日誌文件名,日誌保存目錄必須手動建立,注:這裏的文件路徑要注意BASE_DIR表明的是小luffyapi '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, # 是否讓日誌信息繼續冒泡給其餘的日誌處理系統 }, } }
官網翻譯中文
loggin日誌配置的注意點
日誌的提示的等級
環境變量
dev.py
# 環境變量操做:小luffyapiBASE_DIR與apps文件夾都要添加到環境變量
import sys sys.path.insert(0, BASE_DIR) APPS_DIR = os.path.join(BASE_DIR, 'apps') sys.path.insert(1, APPS_DIR)
dev.py:修改logging日誌的參數配置
# 真實項目上線後,日誌文件打印級別不能太低,由於一第二天志記錄就是一次文件io操做 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': 'INFO', 'class': 'logging.handlers.RotatingFileHandler', # 日誌位置,日誌文件名,日誌保存目錄必須手動建立,注:這裏的文件路徑要注意BASE_DIR表明的是小luffyapi '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, # 是否讓日誌信息繼續冒泡給其餘的日誌處理系統 }, } }
新建的logging管理日誌下
import logging logger = logging.getLogger('django')
from rest_framework.views import exception_handler as drf_exception_handler from rest_framework.views import Response from rest_framework import status from utils.logging import logger def exception_handler(exc, context): response = drf_exception_handler(exc, context) if response is None: logger.error('%s - %s - %s' % (context['view'], context['request'].method, exc)) # 主要修改這句話 return Response({ 'detail': '服務器錯誤' }, status=status.HTTP_500_INTERNAL_SERVER_ERROR, exception=True) return response
二次封裝Response模塊 相應模塊配置等統一放到utils公共的文件內
from rest_framework.response import Response class APIResponse(Response): def __init__(self, data_status=0, data_msg='ok', results=None, http_status=None, headers=None, exception=False, **kwargs): data = { 'status': data_status, 'msg': data_msg, } if results is not None: data['results'] = results data.update(kwargs) super().__init__(data=data, status=http_status, headers=headers, exception=exception)
在cmd終端以管理員的身份建立專屬的數據庫,惟一的密碼操做單一的數據庫。
""" 1.管理員鏈接數據庫 >: mysql -uroot -proot 2.建立數據庫 >: create database luffy default charset=utf8; 3.查看用戶 >: select user,host,password from mysql.user; """
""" 設置權限帳號密碼 # 受權帳號命令:grant 權限(create, update) on 庫.表 to '帳號'@'host' identified by '密碼' 1.配置任意ip均可以連入數據庫的帳戶 >: grant all privileges on luffy.* to 'luffy'@'%' identified by 'Luffy123?'; 2.因爲數據庫版本的問題,可能本地還鏈接不上,就給本地用戶單獨配置 >: grant all privileges on luffy.* to 'luffy'@'localhost' identified by 'Luffy123?'; 3.刷新一下權限 >: flush privileges; 只能操做luffy數據庫的帳戶 帳號:luffy 密碼:Luffy123? """
設置權限管理數據庫
退出管理員,用帳號 luffy 密碼 luffy 登入開發
>: exit
>: mysql -uluffy -pluffy
後臺項目數據庫的配置
#.luffyapi/settings/dev.py配置 DATABASES = { "default": { "ENGINE": "django.db.backends.mysql", "HOST": "127.0.0.1", "PORT": 3306, "USER": "luffy", "PASSWORD": "luffy123?", "NAME": "luffy", } }
luffypai/任意__init__.py
import pymysql pymysql.install_as_MySQLdb()
Django2.x一些版本pymysql兼容問題:以下兩張截圖。