4、Django-模板,Admin站點,rest設計風格,drf安裝配置
阿新 • • 發佈:2018-12-20
模板
-
在 templates 目錄中新建一個模板檔案,如:index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>{{ name }}</h1> <h1>{{ my_list.0 }}</h1> <h1>{{ my_dict.name }}</
-
在settings.py中,配置模板目錄
'DIRS': [os.path.join(BASE_DIR, 'templates')]
-
在檢視中渲染使用模板
def index(request): context = { 'name': 'django', 'my_list': ['python', 'java', 'php', 'c/c++'], 'my_dict': { 'name': 'python', 'age'
Admin站點使用
-
修改語言和時區
LANGUAGE_CODE =
-
建立超級管理員賬號:
python manage.py createsuperuser
-
註冊模型類到後臺
# users/admin.py: from app01.models import Department, Employee class DepartmentAdmin(admin.ModelAdmin): # 在管理後臺顯示哪些欄位資訊 list_display = ['id', 'name', 'create_date', 'is_delete'] # 註冊模型管理類時,指定ModelAdmin類 admin.site.register(Department, DepartmentAdmin)
-
登入管理後臺
http://127.0.0.1:8000/admin
,對資料進行增刪改查管理
admin站點列表頁控制
# admin.py
class DepartmentAdmin(admin.ModelAdmin):
# 在管理後臺顯示哪些欄位資訊
list_display = ['id', 'name', 'create_date', 'is_delete']
# 每頁顯示的條數
list_per_page = 3
# 顯示或隱藏操作欄
actions_on_top = True
actions_on_bottom = True
# 顯示過濾欄: 按性別和部門過濾
list_filter = ['gender', 'department']
# 搜尋部門名稱
search_fields = ['name']
# 註冊模型管理類時,指定ModelAdmin類
admin.site.register(Department, DepartmentAdmin)
Admin站點上傳圖片(ImageField欄位使用)
-
實現圖片上傳功能需要使用Pillow包,安裝pillow
pip install Pillow
-
在
settings.py
配置檔案中,配置上傳的圖片儲存在哪個目錄下MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
-
模型類對應的欄位型別要使用ImageField:
class TestUser(models.Model): name = models.CharField(max_length=20) # 使用者頭像 upload_to='users': 上傳的檔案儲存在 users子目錄下 avatar = models.ImageField(upload_to='users', null=True)
-
遷移更新資料庫表
python manage.py makemigrations python manage.py migrate
-
註冊模型類到admin站點
# admin.py
admin.site.register(TestUser)
- 測試:進入管理後臺,新增一條資料,上傳圖片。
web應用開發模式
-
前後端不分離
- 伺服器既要處理業務邏輯,又做渲染模板操作
- 伺服器返回html頁面或作重定向
- 伺服器返回html頁面不適用於移動端應用(android, ios)
-
前後端分離
- 伺服器僅處理業務邏輯,不做渲染模板操作
- 伺服器不返回html,而是返回json/xml
- 伺服器能夠同時給pc端和移動端應用提供服務
介面開發(API開發): 定義檢視和路由,並返回json/xml資料;
RESTful設計風格
RESTful: 介面開發(介面定義)一種被普遍採用設計風格
- 通過url知道 操作的資料是什麼
- 通過 請求方法就知道,是做什麼操作(增刪改查)
- 通狀態碼知道操作的結果
/employees/?gender=0&page=1
/employee/0/1
請求方法 | 請求地址 | 後端操作 |
---|---|---|
GET | /goods | 獲取所有商品 |
POST | /goods | 增加商品 |
GET | /goods/1 | 獲取編號為1的商品 |
PUT | /goods/1 | 修改編號為1的商品 |
DELETE | /goods/1 | 刪除編號為1的商品 |
- URL 代表一種資源/資料 不使用動詞
- 請求方法 GET 查詢 POST 新增 PUT 修改 DELETE 刪除
- 狀態碼 200 請求成功(查詢、修改) 201 新建成功 204 刪除成功 400 請求有誤(請求引數有誤) 401 使用者未認證 403 沒有許可權訪問 404 資料不存在
- 響應資料 查詢:返回查詢到的資料 新增:返回新增的資料 修改:返回修改後的資料 刪除:無需返回資料
介面開發核心工作
-
序列化:物件 --> json
-
反序列化:json --> 物件
-
引數合法性校驗
-
業務資料增刪改查
案例-使用django開發【重要】
serializable: 序列化: 模型類物件(查詢集) --> 字典(列表) --> json/xml
反序列化: json/xml -> 字典 --> 模型類物件
參照講義的程式碼
DRF-環境安裝與配置
安裝drf包
pip install djangorestframework
註冊drf應用
INSTALLED_APPS = [
...
'rest_framework', # 註冊drf應用
]
DRF-第一個DRF例子
-
定義序列化器
建立序列化器 # rest/serializers.py class DepartmentSerializer(serializers.ModelSerializer): """部門序列化器""" class Meta(object): # 關聯的模型類 model = Department # 表示包含模型類中的所有屬性 fields = '__all__'
-
編寫檢視
class DepartmentViewSet(ModelViewSet): # 指定查詢集 queryset = Department.objects.all() # 指定檢視使用的序列化器 serializer_class = DepartmentSerializer
-
註冊路由
# rest/urls.py urlpatterns = [ ... ] # 註冊路由(包含了多個url配置項) router = DefaultRouter() router.register(r'departments', views.DepartmentViewSet) urlpatterns += router.urls # 把生成的路由地址 追加到 django 的路由列表中
-
使用 drf 的模板介面進行測試:
# 在瀏覽器中訪問,進行介面測試 http://127.0.0.1:8000/departments/ http://127.0.0.1:8000/departments/1/