1. 程式人生 > 其它 >專案基礎 pip換源 虛擬環境介紹和搭建 luffy後臺配置 配置日誌 處理全域性異常

專案基礎 pip換源 虛擬環境介紹和搭建 luffy後臺配置 配置日誌 處理全域性異常

今日內容概要

  • 專案基礎
  • pip換源
  • 虛擬環境介紹和搭建
  • luffy後臺配置
  • 配置日誌
  • 處理全域性異常

內容詳細

1、專案基礎

1.1 企業中專案型別

1 商城類的---》某某團

2 入口網站[企業站和門戶站
	新加坡--》遊戲的展示頁面
	展示頁面
       
3 社交網路
	app後端
       
4 諮詢論壇
	技術類---》賣課,賣資料
       
5 內部系統---》python做這種多
	辦公管理,人事管理,進銷存,客戶關係管理(crm)
	自動化運維專案
	自動化測試專案
       
6 個人部落格
       
7 內容收費網站

1.2 企業專案開發流程

# 公司專案來源
	公司需要用
	給客戶定製
	網際網路專案
  
# 立項
	需求分析(產品經理,技術人員)---》產品原型--->前端後端
    
# 前端:根據原型圖:ui+前端---》ui切圖---》前端實現---》mock資料(自己造的假資料)

# 後端:確立專案架構,技術選型----》需求說明書+原型圖---》開發介面,自己測試--》介面文件

# 前後端程式碼整合---》前後端聯調---》整合測試(測試部,質量控制部)
# 上線

# 你們的工作流程:在公司專案管理平臺(禪道)---》看自己任務----》確定需求(測試,問領導,問同事)---》寫程式碼--》提交到git倉庫---》管理平臺把需求設定成完成


# 軟體開發模式
	瀑布模式:早期被廣泛採用的軟體開發模型---》bbs專案
	敏捷開發:不停的開發--》測試---》上線轉圈
	scrum---》Sprint週期(小功能從開發到完成的時間)---》1周
	不做整體資料庫的設計---》寫到哪個版塊,再去設計相關表

# 路飛專案需求
	首頁輪播圖
	登陸註冊
	多方式登陸,手機號登陸
	手機號註冊
	課程列表
	過濾,排序
	課程詳情
	視訊播放,課程介紹
	下單--》支付
	支付寶支付
	回撥修改訂單
	上線

2、pip換源

# pip install  pypi源下載原始碼,在國外,比較慢---》映象(pypi在國內備份)--->豆瓣,清華,阿里

# pip install -i 源地址  模組名  臨時生效

# 想以後只要 pip install django---》直接從國內下載

# 配置永久生效
# win平臺:
	1、檔案管理器檔案路徑位址列敲:
		%APPDATA% 回車,快速進入到指定使用者目錄下:C:\Users\電腦使用者\AppData\Roaming 資料夾中(也可能為:C:\Users\Administrator\AppData\Roaming或其他類似的)
        
	2、新建 pip 資料夾並在資料夾中新建 pip.ini 配置檔案
    
	3、新增 pip.ini 配置檔案內容:以豆瓣源為例:
		[global]
		index-url = http://pypi.douban.com/simple
		[install]
		use-mirrors =true
		mirrors =http://pypi.douban.com/simple/
		trusted-host =pypi.douban.com

# 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中用
	File | Settings | Project: xxx | Python Interpreter
		+
			Manage Repositories
				搜尋源地址新增
  
# pycharm中的terminal不是和cmd一樣

# pypi Python官方模組站點,我們個人也可以傳模組
	註冊賬號
	寫一個模組
	setup.py
	上傳

3、虛擬環境介紹和搭建

3.1 pycharm設定虛擬環境

# 為什麼會出現虛擬環境?
	假設有個專案django 1.11.8
	又有個專案django 2.2.2
	由於在系統的直譯器上只能裝一個django,導致同時只能跑一個專案
	每個專案使用自己的一個直譯器---》虛擬環境--》通過系統直譯器創造出一個直譯器環境,他倆相互不干擾
    
	系統有直譯器,
		第一個專案有個虛擬環境 django1.11.8 
		第二個專案有個虛擬環境 django 2.2.2
	以後變成,一個專案一個直譯器
    
    
# 其他語言相關方案
	vue 專案路徑下--》node moduls---》這個專案依賴的環境--》刪除---》npm install
  -go:go mod解決多版本共存問題
  -java:maven解決多版本jar包問題
  -python:虛擬環境
  
# python中虛擬環境解決方案有好幾個(virtualenv,pipenv。。。。)

# 如果不使用virtualenv,可以直接在pycharm中做

3.2 命令方式操作虛擬環境

3.2.1 win安裝

# centos沒有圖形化介面的話--->沒法裝pycharm---》沒法點點點建立,只能使用命令

## 第一步:安裝
	pip3 install virtualenv  # 虛擬環境模組--》建立虛擬環境麻煩
	pip3 install virtualenvwrapper-win  # 虛擬環境輔助模組---》更快捷方便的操作和管理虛擬環境
    
	安裝完,在 python/scripts資料夾下就會有 virtualenv.exe和virtualenvwrapper.bat 批處理檔案
    
	因為script資料夾又在環境變數裡--》這倆安裝命令可以在任意路徑下執行

## 第二步:配置環境
	新建環境變數:填入變數名與值
	變數名:WORKON_HOME  
	變數值:自定義存放虛擬環境的絕對路徑
	eg: WORKON_HOME: E:\Django

# 同步配置資訊(可忽略):
	去Python3的安裝目錄 => Scripts資料夾 => virtualenvwrapper.bat => 雙擊

3.2.2 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

# 在終端讓配置生效:
	ource ~/.bash_profile

3.3 虛擬環境命令

# win安裝/Mac linux安裝 完成後

# 1、建立虛擬環境到配置的WORKON_HOME路徑下
	選取預設Python環境建立虛擬環境:
		mkvirtualenv 虛擬環境名稱

	基於某Python環境建立虛擬環境,並進入到虛擬環境:
		mkvirtualenv -p python2.7 虛擬環境名稱
		mkvirtualenv -p python3.6 虛擬環境名稱

# 2、檢視已有的虛擬環境
	workon

# 3、使用某個虛擬環境
	workon 虛擬環境名稱
	
# 4、進入|退出 該虛擬環境的Python環境
	python | exit()

# 5、為虛擬環境安裝模組
	pip或pip3 install 模組名

# 6、退出當前虛擬環境
	deactivate

# 7、刪除虛擬環境(刪除當前虛擬環境要先退出)
	rmvirtualenv 虛擬環境名稱

3.4 補充環境變數

# 補充:
	環境變數:在命令列下敲某個命令,為什麼能執行?---》要麼這個命令就在當前路徑下,要麼在環境變數的path路徑下, 如果能找到就執行,找不到就報錯
    
	環境變數有兩種:
		使用者環境變數--》當前使用者有效
		系統環境變數--》所有人都有效
        
	cmd敲python---》確認好,python到底是python2,還是python3,還是你的虛擬環境的python3
    
	環境變數的上下順序
    
	pip 和python 成對的,裝的模組,給python直譯器用的
  	pip3 install django
	python3.6---》pip3   python3.10---》pip3 
	更有甚者:建立了虛擬環境---》虛擬環境有pip---》把虛擬環境的pip加入到了環境變數
    
	通過起別名方式來多版本共存
		python3.6  python3.10
		pip3.6     pip3.10

4、luffy專案後臺建立

# 第一步:
	先從cmd視窗建立虛擬環境
		mkvirtualenv luffy_api
	檢視已安裝模組包 pip list
	提前下載指定版本django: pip install django==2.2.2
        
# 第二步:
	使用pycharm建立後臺路飛專案
	按圖所示選虛擬環境直譯器建立
	配置drf模組:djangorestframework

4.1 專案目錄調整

# 建立apps資料夾:今後存放所有的app

# 建立setting資料夾:存放配置檔案
	更改配置檔名稱:dev.py(開發階段專用)
	複製一份配置檔案:pro.py(上線階段專用)

# 更改專案啟動配置檔案路徑:
def main():
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy_api.setting.dev')
    
# 控制檯:python manage.py runserver  或者點綠色箭頭就可以啟動專案了

# 調整app的路徑,以後把所有app都放到luffy_api下的apps資料夾---》整潔
	切換到apps路徑下:cd luffy_api/apps
	執行建立app的命令:
		python ../../manage.py startapp user
        
# 在dev.py中註冊app,執行報錯,報錯原因是找不到user這模組
	原來直接寫app名字不報錯--》原因是app就在專案根路徑下(模組的查詢)--》由於專案的根路徑在環境變數中,app就在根路徑下,它能直接找到
	現在的問題是apps路徑不在環境變數中,它就找不到
	把apps的路徑加入到環境變數中--》要在專案的啟動時加--》啟動入口是配置檔案
    
	到配置檔案中:寫入 
import sys
# 把apps的路徑加入到環境變量了
	sys.path.append(os.path.join(BASE_DIR, 'apps'))
	以後在 INSTALLED_APPS中只需要寫app的名字註冊即可
    
# 新建 logs資料夾,luffy_api/lib資料夾,luffy_api/utils資料夾,script資料夾
    

# 測試階段執行沒問題,專案上線,使用uwsgi上線---》執行wsgi.py-->修改如下
	os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffy_api.setting.pro')

# 國際化
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False

# 把 小luffy_api也就是BASE_DIR 也加入到環境變數
	sys.path.append(BASE_DIR)
	匯入模組的時候,只要從環境變數的路徑開始導就可以了,從小luffy_api路徑開始匯入即可
	雖然pycharm報紅,但是沒有錯,點右鍵,把該路徑(在環境變數中的),做成source root即可
	以後再從這個路徑下導包,不會報錯了
    
### 注意:以後匯入包
	儘量用最短路徑匯入,如果從長路徑匯入--》路徑經過的py檔案都會去執行--》可能會導致迴圈匯入的問題
	個人推薦用相對匯入
	# from apps.user import models
	from . import models  推薦用這個
  
	py檔案中有相對匯入,這個py檔案不能作為指令碼執行
	django專案中,由於沒有右鍵執行的指令碼,所以都可以用相對匯入
    
    
    
### 專案目錄結構
"""
├── luffy_api
	├── logs/  # 專案執行時/開發時日誌目錄 - 包
	├── luffy_api/  # 專案主應用,開發時的程式碼儲存 - 包
		├── apps/  # 開發者的程式碼儲存目錄,以模組[子應用]為目錄儲存 - 包
		├── libs/  # 第三方類庫的儲存目錄[第三方元件、模組] - 包
		├── setting/  # 配置目錄 - 包
			├── dev.py  # 專案開發時的本地配置
			└── prod.py  # 專案上線時的執行配置
		├── urls.py  # 總路由
		└── utils/  # 多個模組[子應用]的公共函式類庫[自己開發的元件]
	├── manage.py  # 指令碼檔案
	└── scripts/  # 儲存專案運營時的指令碼檔案 - 資料夾
"""

5、luffy後臺配置

5.1 配置日誌

# 在配置檔案中加入 dev.py:
### 日誌相關
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,  # 是否讓日誌資訊繼續冒泡給其他的日誌處理系統
        },
    }
}



### 在utils下建立 ,my_logging.py 寫入(注意檔名 不要與模組名重複):
import logging
# 創造一個logger物件,使用的是配置檔案中的django這個
logger = logging.getLogger('django')


### 以後使用,匯入直接用--》列印到控制檯和記錄到檔案中
from utils.my_logging import logger
logger.info("我執行了一下")
"""
如果報錯:
	no such table: django_session
	
去到命令視窗執行:
	python manage.py migrate(django1.9以後版本)
"""

5.2 處理全域性異常

# 建立:utils/excepiton.py
## 全域性異常捕獲

from rest_framework.views import exception_handler  # 預設沒有配置,出了異常會走它
from rest_framework.response import Response
from utils.my_logging import logger


def common_exception_handler(exc, context):
    res = exception_handler(exc, context)
    if res:
        res = Response(data={'code': 998, 'msg': res.data.get('detail', '伺服器異常,請聯絡系統管理員')})
    else:
        res = Response(data={'code': 999, 'msg': str(exc)})
    request = context.get('request')
    view = context.get('view')
    logger.error('錯誤原因:%s,錯誤檢視類:%s,請求地址:%s,請求方式:%s' % (str(exc), str(view), request.path, request.method))
    return res



# 配置檔案dev.py配置:
REST_FRAMEWORK = {
    'EXCEPTION_HANDLER': 'utils.exception.common_exception_handler'  # 再出異常,會執行這個函式
}