1. 程式人生 > >4、Django-模板,Admin站點,rest設計風格,drf安裝配置

4、Django-模板,Admin站點,rest設計風格,drf安裝配置

模板

  1. 在 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 }}</
    h1
    >
    </body> </html>
  2. 在settings.py中,配置模板目錄

    'DIRS': [os.path.join(BASE_DIR, 'templates')]
    
  3. 在檢視中渲染使用模板

    def index(request):
        context = {
            'name': 'django',
            'my_list': ['python', 'java', 'php', 'c/c++'],
            'my_dict': {
                'name': 'python',
                'age'
    : 20, 'gender': '男', } } # 方式1 ''' template = loader.get_template('index.html') html_str = template.render(context) return HttpResponse(html_str) ''' # 方式2 return render(request, 'index.html', context)

Admin站點使用

  1. 修改語言和時區

     LANGUAGE_CODE =
    'zh-hans' TIME_ZONE = 'Asia/Shanghai'
  2. 建立超級管理員賬號:

    python manage.py createsuperuser
    
  3. 註冊模型類到後臺

    # 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)
    
  4. 登入管理後臺 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欄位使用)

  1. 實現圖片上傳功能需要使用Pillow包,安裝pillow

    pip install Pillow
    
  2. settings.py配置檔案中,配置上傳的圖片儲存在哪個目錄下

    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
    
  3. 模型類對應的欄位型別要使用ImageField:

    class TestUser(models.Model):
        name = models.CharField(max_length=20)
    	# 使用者頭像     upload_to='users': 上傳的檔案儲存在 users子目錄下
        avatar = models.ImageField(upload_to='users', null=True)
    
  4. 遷移更新資料庫表

    python manage.py makemigrations
    python manage.py migrate
    
  5. 註冊模型類到admin站點

# admin.py
admin.site.register(TestUser)
  1. 測試:進入管理後臺,新增一條資料,上傳圖片。

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 資料不存在
  • 響應資料 ​ 查詢:返回查詢到的資料 ​ 新增:返回新增的資料 ​ 修改:返回修改後的資料 ​ 刪除:無需返回資料

介面開發核心工作

imgs

imgs

  • 序列化:物件 --> json

  • 反序列化:json --> 物件

  • 引數合法性校驗

  • 業務資料增刪改查

案例-使用django開發【重要】

serializable: 序列化: 模型類物件(查詢集) --> 字典(列表) --> json/xml

反序列化: json/xml -> 字典 --> 模型類物件

參照講義的程式碼

DRF-環境安裝與配置

安裝drf包

pip install djangorestframework

註冊drf應用

INSTALLED_APPS = [
    ...
    'rest_framework',    # 註冊drf應用
]

DRF-第一個DRF例子

  1. 定義序列化器

    建立序列化器
    # rest/serializers.py
    class DepartmentSerializer(serializers.ModelSerializer):
        """部門序列化器"""
    
        class Meta(object):
            # 關聯的模型類
            model = Department
            # 表示包含模型類中的所有屬性
            fields = '__all__'
    
  2. 編寫檢視

    class DepartmentViewSet(ModelViewSet):
        # 指定查詢集
        queryset = Department.objects.all()
        # 指定檢視使用的序列化器
        serializer_class = DepartmentSerializer
    
  3. 註冊路由

    # rest/urls.py
    urlpatterns = [
        ...
    ]
    
    # 註冊路由(包含了多個url配置項)
    router = DefaultRouter()
    router.register(r'departments', views.DepartmentViewSet)
    urlpatterns += router.urls   # 把生成的路由地址 追加到 django 的路由列表中
    
  4. 使用 drf 的模板介面進行測試:

    # 在瀏覽器中訪問,進行介面測試
    http://127.0.0.1:8000/departments/
    http://127.0.0.1:8000/departments/1/