luffy項目:基於vue與drf先後臺分離項目(1)

"""
一、業務邏輯:登陸註冊 - 主頁(基礎信息展現) - 課程頁(複雜信息展現)- 課程訂單生產與支付 - 上線訂單生成
二、實際項目開發的技術點:
    git版本控制
    第三方短信認證
    接口緩存 - redis數據庫
    celery異步任務,接口緩存異步同步數據
    支付寶支付
    真實服務器項目上線
    
三、前臺:頁面現成的、先後臺的數據交互代碼、element-ui、jq、bootstrap、原生
"""

pip安裝源

"""
一、採用國內源,加速下載模塊的速度
二、經常使用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

Windows

"""
一、文件管理器文件路徑地址欄敲:%APPDATA% 回車,快速進入 C:\Users\電腦用戶\AppData\Roaming 文件夾中
二、新建 pip 文件夾並在文件夾中新建 pip.ini 配置文件
三、新增 pip.ini 配置文件內容
"""

 

MacOs、Linux

"""
一、在用戶根目錄下 ~ 下建立 .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環境
三、防止出現包管理混亂及包版本衝突

 

windows

安裝sql

# 建議使用pip3安裝到python3環境下
pip3 install virtualenv
pip3 install virtualenvwrapper-win

配置虛擬環境管理器工具目錄

  添加到環境變量數據庫

# 配置環境變量:
# 控制面板 => 系統和安全 => 系統 => 高級系統設置 => 環境變量 => 系統變量 => 點擊新建 => 填入變量名與值
變量名:WORKON_HOME  變量值:自定義存放虛擬環境的絕對路徑
eg: WORKON_HOME: D:\Virtualenvs  

# 同步配置信息:
# 去向Python3的安裝目錄 => Scripts文件夾 => virtualenvwrapper.bat => 雙擊 加載

 

MacOS、Linux

安裝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 虛擬環境名稱

 

查看安裝模塊名

使用虛擬環境安裝django

查看虛擬環境下安裝的全部模塊

 

pycharm使用

  添加在終端手動建立的虛擬環境變量

 

 以虛擬環境建立django項目

 後臺:Django項目的建立

  環境建立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打開項目,並選擇提早備好的虛擬環境 """

 

建立好項目後用pycharm打開luffyapi項目

 

 修改項目結構,利於開發環境的使用

 

 重構項目目錄

"""
├── 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

 

國際化配置

 

配置loggin日誌

# 官網: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日誌配置的注意點

 

 日誌的提示的等級

 luffy後臺配置

  環境變量

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)

 

在寫項目直接直接導入utils文件夾下面也不會「錯誤提示」的解決辦法

 

 解決報錯的操做:告訴djang當前加載的模塊在環境變量中。

 

 封裝logger

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, # 是否讓日誌信息繼續冒泡給其餘的日誌處理系統
        },
    }
}

 

utils/logging.py

  新建的logging管理日誌下

import logging
logger = logging.getLogger('django')

 

封裝項目異常處理

  utils/exception.py

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()

 

settings.py/dev.py

 

 

 Django2.x一些版本pymysql兼容問題:以下兩張截圖。

Django不採用2.0.7版本極可能出現如下問題,須要修改源代碼

 

 

相關文章
相關標籤/搜索