Mac上搭建虛擬環境以及Django項目開啟和配置


1.首先給配置全局pip換源:

'''
0.換源理由:
采用國內源,加載模塊的下載速度。配置了全局換源后,就不用擔心每次下載都需要換源了,一次性更換更徹底。
當然你說你不用換,那你也不用看。直接用國外的源也是可以的。只是國外的下載速度相對來說慢一些。
但是你又不想下國外的源,又想不換全局的。那你每次下載模塊你就這樣來(以下是兩種都行):
 pip3 install -i https://pypi.douban.com/simple 模塊名
 pip3 install -i https://mirrors.aliyun.com/pypi/simple 模塊名
 
換源徹底的從這里開始:

1.在用戶的根目錄下創建一個 .pip 隱藏文件夾
終端執行:mkdir ~/.pip

2.在隱藏文件夾里創建 pip.conf 配置文件
終端執行:
	切換到 .pip 文件夾下:
							執行:cd .pip
											再執行:touch pip.conf
											
3.在 .pip 文件夾下打開 pip.conf 配置文件
終端執行:
	切換到 .pip 文件下,執行 open pip.conf

4.執行 open pip.conf 后,在配置文件里添加換源內容:
有以下兩種源,隨你選擇:
-- 豆瓣:https://pypi.douban.com/simple:
以下才是內容:

[global]
index-url = https://pypi.douban.com/simple
[install]
use-mirrors = true
mirrors = https://pypi.douban.com/simple/
trusted-host = pypi.douban.com


-- 阿里:https://mirrors.aliyun.com/pypi/simple
以下才是內容:
[global]
index-url = https://mirrors.aliyun.com/pypi/simple
[install]
use-mirrors = true
mirrors = http:https://mirrors.aliyun.com/pypi/simple/
trusted-host = mirrors.aliyun.com


當你再去執行下載模塊的時候,已經變得很快了。
'''

2.搭建虛擬環境(基於python3)

'''
搭建虛擬環境的好處:
1.使不同應用開發環境相互獨立
2.環境升級不影響其他應用,也不會影響全局的python環境
3.防止出現包管理混亂及包版本沖突

讓我們開始搭建吧:
1.在終端執行(如果沒換源的請走第一個模塊的內容)也就是安裝虛擬環境:
-- pip3 install virtualenv
-- pip3 install virtualenvwrapper

2.配置(以下都是在終端執行的):
-- open ~/.zshrc
配置環境變量(不需要改變以有的環境,在原基礎上添加即可):
-- export WORKON_HOME='/Users/cody/管理虛擬環境名'
-- export VIRTUALENVWRAPPER_PYTHON='/Library/Frameworks/Python.framework/Versions/3.6/bin/python3'
-- source /Library/Frameworks/Python.framework/Versions/3.6/bin/virtualenvwrapper.sh
保存內容后執行:
-- source ~/.zshrc

3.創建環境
你可以在根目錄下創建一個管理所有虛擬環境的文件夾:
終端執行:
-- mkidr 文件夾名
-- cd 文件夾名
-- virtualenv 虛擬環境名 注:(這樣創建的虛擬環境是系統默認的python2)
-- mkvirtualenv -p python3 虛擬環境名  注:指定python3創建虛擬環境
-- virtualenv -p python3 虛擬環境名    注:這樣也行

4.進入環境,並使用

查看所有虛擬環境 		  -- workon
進入虛擬環境    		 -- workon 虛擬環境名
下載模塊(8.x)       -- pip3 install django
退出環境           -- deactivate
刪除環境          -- rmvirtualenv 虛擬環境名

'''

3.Django項目的創建以及配置

環境創建
'''
都是在終端上執行
1.創建項目的虛擬環境

-- virtualenv -p python3 dgtest

2.在虛擬環境下安裝所需依賴

-- pip3 install django
-- pip3 install djangorestframework
-- pip3 install pymysql

'''
項目創建
'''
終端上執行

1.為項目創建新的文件夾

-- mkidr test

2.創建Django項目

-- cd test
-- django-admin startproject testapi

3.用pycharm打開項目,並選擇創建好的虛擬環境
'''
重構項目目錄
'''
├─testapi         			  #根目錄
	├── logs							#項目運行時/開發時日志目錄 - 文件夾
	├── testapi					  #項目主應用,開發時的代碼保存 - 包
	|	├── apps						# 開發者的代碼保存目錄,以模塊[子應用]為目錄保存 - 包
	|	├── libs						# 第三方類庫的保存目錄[第三方組件、模塊] - 包
	|	├── settins				  # 配置目錄 - 包
  |	|	 ├── dev.py			  # 項目開發時的本地配置
  | |	 ├── prod.py		  # 項目上線時的運行配置
	|	├── utils					  # 多個模塊[子應用]的公共函數類庫[自己開發的組件] -包
	|	├── __init__.py
	|	├── urls.py					# 總路由
	|	├── wsgi.py
	├── scripts					  # 保存項目運營時的腳本文件 - 文件夾
	├── manage.py					# 腳本文件
'''
配置開發環境
'''
1.將原有的 statings 文件夾里的內容剪切到新的 dev.py 文件里

2.修改 wsgi.py 與 manage.py 兩個文件中的下面的內容

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'testapi.settings')
修改為:
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'testapi.settings.dev')

3.將Django的環境語言配置成中文版(隨便你選擇,若不配也行),在 dev.py 里:
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = False

4.修改Django的啟動配置:

DJANGO_SETIONS_MODUD=testapi.settings
修改為:
DJANGO_SETIONS_MODUD=testapi.settings.dev

5.在任意__init__.py 文件下測試配置是否為 dev.py
from django.conf import settings
print(settings)
'''
配置日志(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': {
            '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", "test.log"),
            # 日志文件的最大值,這里我們設置300M
            'maxBytes': 300 * 1024 * 1024,
            # 日志文件的數量,設置最大日志數量為10
            'backupCount': 10,
            # 日志格式:詳細格式
            'formatter': 'verbose',
            # 文件內容編碼
            'encoding': 'utf-8'
        },
    },
    # 日志對象
    'loggers': {
        'django': {
            'handlers': ['console', 'file'],
            'propagate': True, # 是否讓日志信息繼續冒泡給其他的日志處理系統
        },
    }
}
封裝logger(utils/logging.py)
import logging
logger = logging.getLogger('django')
環境變量配置
import sys
sys.path.insert(0, BASE_DIR)
APPS_DIR = os.path.join(BASE_DIR, 'apps')
sys.path.insert(1, APPS_DIR)
封裝項目異常處理(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/response.py)
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)
在testapi/apps/下創建user模塊
'''
在pycharm里的終端輸入:
-- cd testapi/apps
-- python ../../manage.py startapp user 
'''

4.數據庫配置(基於mysql 8.x版本)

'''
一.在終端進入mysql后
第一步:

create user '用戶名'@'%' identified by '用戶密碼'
create user 'test'@'localhost' identified by '123456'

第二步:

grant all privileges on 數據庫名.* to '用戶名'@'%' with grant option
grant all privileges on test.* to 'test'@'localhost' with grant option

第三步:
刷新
flush privileges

第四步檢驗是否成功:

退出當前帳號,用新帳號登陸,再查看所有庫即可。此時用戶指定庫搞定

二.配置Django連接mysql (dev.py)
1.DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', #指定Django連接mysql
        'NAME': 'test',	#庫名
        'USER':'test',  #用戶名
        'PASSWORD':'123456', #密碼
        'HOST': '127.0.0.1',  #本地地址
        'PORT': 3306,		#端口號

    }
}

2.testpai/__init__.py
import pymysql
pymysql.install_as_MySQLdb()

i.此時由於版本問題 可能會報這個錯誤:“RuntimeError: cryptography is required for sha256_password or caching_sha2_password”

那么,請不要慌張,請下載以下插件:
pip install cryptography

ii.如果還有這個錯誤:“mysqlclient 1.3.13 or newer is requitrd:you have 0.9.3”
進去line 36 那個源碼,將 
if version < (1,3,13)  等源碼注釋

iii.如果是這個錯誤:"'str' object has on attribute 'decode'"
進去line 146 加上
query = query.encode()

以上是這個版本可能報的錯誤,

三.mysql數據庫一些常規指令
刪除用戶
delete from mysql.user where user='luffy' and host='%'

查看用戶
select user,host from mysql.user

查看密碼加密規則
select plugin,authentication_string from mysql.user

修改加密規則(我測試了,修改不了加密規則,還是老老實實下載那個插件靠譜,別在這浪費時間了)
alter user '用戶名'@'localhost' identified by 'password' password expire never

更新用戶密碼
alter user '用戶名'@'localhost' identified with mysql_native_password by 'password'

重制密碼
alter user '用戶名'@'localhost' identified by '用戶密碼'




'''

5.創建user表對應的model(user/models.py)

from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
    phone = models.CharField(max_length=11, unique=True)
    icon = models.ImageField(upload_to='icon', default='icon/default.png')

    class Meta:
        db_table = 'test_user'
        verbose_name = '用戶表'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.username
配置user表(dev.py)
INSTALLED_APPS = [
    # ...
    'user',
]

# 自定義User表
AUTH_USER_MODEL = 'user.User'
配置media(dev.py)
'在testapi 下創建文件夾 media,給用戶暴露出去的接口'

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

'media 目錄配置'
'''
├── testapi
    └──	testapi
       	└──	media/ 	
						└──	icon 
								└── default.png
'''
主路由配置:testate/urls.py
from django.contrib import admin
from django.urls import path,re_path,include
from django.views.static import serve
from django.conf import settings

urlpatterns = [
    path('admin/', admin.site.urls),
    path('user/', include('user.urls')),
    re_path('^media/(?P<path>.*)',serve,{'document_root':settings.MEDIA_ROOT})
]
子路由配置:user/urls.py
from django.urls import path, re_path
urlpatterns = [
]
數據庫遷移命令(在根目錄下)
python3 manage.py makemigrations
python3 manage.py migrate

'將user表注冊在admin里'

from django.contrib import admin
from user import models
admin.site.register(models.User)

'創建超級用戶'
python3 manage.py createsuperuser


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM