1、創建項目及文件夾作用
(1)項目創建
在Pycharm頁面,依次點擊點擊file > New Project…後,在如下彈出框中,先選擇左側的Django,然後選擇右側創建項目的位置及文件名,點擊右下角Create創建即可。
如下展示的是創建成功後文件夾目錄:
(2)文件夾作用
上圖中各文件夾作用:
- 外層MyDjango:文件夾名字,可更改;
- 內層MyDjango:項目名字;
- 內層templates:放置項目的靜態文件,如前端代碼、項目圖片等等;
- manage.py:命令行工具,使整個項目的啓動文件;
其中內層文件夾MyDjango中有五個文件,作用如下:
- Init.py:初始化文件,無需修改,是項目的初始化文件,有了這個文件標誌當前文件夾是一個包,可以被引用;
- asgi.py:ASGI(Asynchronous Server Gateway Interface)是 Django 團隊提出的一種具有異步功能的 Python web 服務器網關接口協議。能夠處理多種通用的協議類型,包括 HTTP,HTTP2 和 WebSocket。WSGI是基於 HTTP 協議模式的,不支持WebSocket,而ASGI的誕生則是爲了解決 Python 常用的 WSGI 不支持當前 Web 開發中的一些新的協議標準(WebSocket、Http2 等)。同時,ASGI向下兼容WSGI標準,可以通過一些方法跑WSGI的應用程序。常用的「服務器」有Daphne、Uvicorn;
- settings.py:項目配置文件,所有的Django的配置信息都在這裏面,包括數據庫的配置,靜態文件的配置,還有django依賴的第三方擴展包;
- urls.py:項目路由設置,可理解爲網站的地址信息;
- wsgi.py:全稱Python Web Server Gateway Interface,是Python服務器網關接口,是Python應用與Web服務器之間的接口,用於Django項目在服務器上的部署和上線,一般不用修改。
(3)創建APP
每一個APP就是一個獨立的模塊,互相之間開發不受影響。
在Pycharm內的終端中輸入命令
python manage.py startapp app名字
如下圖所示:
生成的新的目錄結構會多一個app1文件夾,如下圖所示:
app1爲一個app的名字,裏面各個文件作用如下:
- migrations文件夾:數據遷移包 , 負責遷移文件 , 生成數據庫表數據 , 後期我們要使用他去結合models生成數據庫表。
python manage.py makemigrations:生成遷移文件
python manage.py migrate:執行遷移文件 - init.py:初始化文件 同樣也標誌我們的app可以被引用;
- admin.py:後臺管理系統 , 後期我們的可以通過他管理我們的model和數據庫;
- app.py:Django的生成app名稱的文件;
- models.py:模型文件 裏面放的都是數據庫表的映射;
- tests.py:測試文件;
- views.py:邏輯處理模塊,視圖函數文件。
2、配置
settings.py文件各個模塊作用:
1.項目路徑
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
2.加密
主要用於重要數據的加密處理,提高系統安全性,是哈希值。主要用於用戶密碼、CSRF機制和會話Session等數據加密。
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '2^1$ticf0_*n5c+sk(2eaxsax#6@y*hd7ffsq#4(3il6b#)6a$'
3.調試模式
布爾類型,開發階段應設置爲True,在開發過程中自動檢測代碼是否發生更改,根據檢測結果執行是否刷新重啓系統。
項目部署階段改爲False,否則會泄露系統相關信息。
DEBUG = True
4.設置可訪問的域名
默認爲空。當DEBUG爲True且ALLOWED_HOSTS爲空時,項目只允許以localhost或者127.0.0.1在瀏覽器上訪問;當DEBUG爲False時,ALLOWED_HOSTS 爲必填項,否則無法啓動,如果想允許所有域名訪問,可設置ALLOWED_HOSTS = [’*’]
ALLOWED_HOSTS = []
5.App列表
說明有哪些App,此時已有的admin、auth和session等
admin:內置後臺管理系統;
auth:內置用戶認證系統;
contenttypes:記錄項目中所有model元數據(Django的ORM框架);
session:Session會話功能,用於標識當前網站的用戶身份,記錄相關用戶信息;
messages:消息提示功能;
staticfiles:查找靜態資源路徑;
app1:添加的一個app。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
‘app1’
]
6.中間件
中間件是介於request與response處理之間的一道處理過程,能在全局上改變django的輸入與輸出。
比如已經默認開啓了csrf驗證。csrf機制主要用於表單提交,防止竊取網站用戶信息來製造惡意請求。
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
7.根級url配置
ROOT_URLCONF = 'MyDjango.urls'
8.靜態文件
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')]
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
9.WSGI接口
WSGI_APPLICATION = 'MyDjango.wsgi.application'
10.數據庫設置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
11.密碼驗證
AUTH_PASSWORD_VALIDATORS = [
{
# 檢查密碼和用戶某些屬性的相似性
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
# 檢查密碼的最小長度
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
# 檢查密碼是否出現在常用密碼錶中
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
# 檢查密碼是否全爲數字
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
12.語言、時區、
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
13.靜態文件
STATIC_URL = '/static/'
例如:
#單級目錄靜態文件
# STATICFILES_DIRS=(
# os.path.join(BASE_DIR,"statics"),
# )
#多級目錄靜態文件
STATICFILES_DIRS=(
os.path.join(BASE_DIR,"blog","statics"),
)