1. 程式人生 > ># Django admin、form表單的應用記錄

# Django admin、form表單的應用記錄

表單 gets 使用 查找 圖片 clas quest ali password

目錄

  • Django admin、form表單的應用記錄
    • 一 Django admin
      • 1. 使用介紹
    • form組件使用
      • 1. form的作用
      • 2. form組件生成HTMKL代碼
      • 3. form組件校驗數據有效性
      • 3. form組件如何給html標簽設置默認值

Django admin、form表單的應用記錄

一 Django admin

1. 使用介紹

1. 創建超級用戶

python manage.py createsuperuser
username: wph
password: 123123qwe

2. 頁面漢化,更改settings.py

# LANGUAGE_CODE = ‘en-us‘
LANGUAGE_CODE = ‘zh-hans‘

在app的admin.py中 導入要管理的表

from django.contrib import admin
from app01 import models

# Register your models here.

# 將app01中的表 註冊到admin中,之後就能在admin頁面對表管理
admin.site.register(models.Publisher)

3. 顯示字段的中文

要在管理頁面顯示字段的中文名稱:
在字段中加入verbose_names

class Publisher(models.Model):
    name = models.CharField(max_length=32, unique=True, verbose_name=‘出版社名稱‘)
    address = models.TextField()

4. 顯示表的中文名稱,加入Meta類

顯示表的中文名稱,加入Meta類

class Publisher(models.Model):
    name = models.CharField(max_length=32, unique=True, verbose_name=‘出版社名稱‘)
    address = models.TextField(verbose_name=‘出版社地址‘)
    
    class Meta:
        verbose_name = ‘出版社‘
        # 顯示復數會加s,需要加入如下字段;
        verbose_name_plural = verbose_name

5. 顯示對象的名稱

顯示添加的信息為對象 Publisher object ,改為詳細信息

# 在models中加入如下類
    def __str__(self):
        return self.name

6. 必填項更改

技術分享圖片

# 在models的字段中,null=True 控制數據庫可以為空,black=True 控制django admin可以為空

    phone = models.CharField(max_length=11, null=True, blank=True)  

form組件使用

1. form的作用

  1. 生成HTML代碼
  2. 幫我們做數據有效性的校驗
  3. 保留上次輸入的內容,顯示錯誤提示

2. form組件生成HTMKL代碼

3. form組件校驗數據有效性

1. 內置的校驗規則

內置的校驗規則
1. require=True 該字段必填
2. max_length 該字段最大長度
3. min_length 該字段最小長度

2. 自定義校驗規則(正則)

  1. 手機號的格式校驗 利用內置的正則校驗
from django.core.validators import RegexValidator

    phone = forms.CharField(
        max_length=11,
        label=‘電話‘,
        required=False,  # 設置非必填項
        widget=forms.widgets.TextInput(attrs={‘class‘: ‘form-control‘}),
        validators=[RegexValidator(r‘^1[3456789]\d{9}$‘, ‘手機號碼格式不正確‘)]  #自定義校驗規則
    )
  1. 手機號的唯一性校驗
    自定義校驗規則
from django.core.exceptions import ValidationError

def phone_validate(value):
    # 拿用戶天界的手機號去數據庫匹配查找
    is_exist = models.Book.objects.filter(phone=value)
    if is_exist:
        raise ValidationError(‘該手機號已經註冊‘)
    else:
        return value
        
# 使用自定義校驗
    phone = forms.CharField(
        max_length=11,
        label=‘電話‘,
        required=False,  # 設置非必填項
        widget=forms.widgets.TextInput(attrs={‘class‘: ‘form-control‘}),
        validators=[RegexValidator(r‘^1[3456789]\d{9}$‘, ‘手機號碼格式不正確‘), phone_validate]  # 自定義校驗規則
    )

3. 使用鉤子(hook)函數做校驗

  1. 局部鉤子
class BookForm(forms.Form):
    def a
        pass
    
    # 自定義一個局部鉤子函數
    def clean_title(self):
        value = self.cleaned_data.get(‘title‘)
        if ‘jpm‘ in value:
            raise ValidationError(‘jpm已被河蟹‘)
  1. 全局鉤子
class BookForm(forms.Form):
    def foo():
        pass
    
    # 全局鉤子
    def clean(self):
        self.cleaned_data  # 可以去到所有字段數據 可以用來判斷二次確認密碼是否爭取
        self.add_error(‘字段‘, ‘兩次輸入密碼不一致‘)
        pass

3. form組件如何給html標簽設置默認值

1. 每一個字段設置默認值

def edit_book(request, pk):
    book_obj = models.Book.objects.filter(id=pk).first()
    book_dict = model_to_dict(book_obj)  # 把一個對象快速轉換成字典
    book_dict[‘publish_date‘] = book_obj.publish_date.strftime(‘%Y-%m-%d‘)
    form_obj = BookForm(book_dict)  ## 給form實例傳一個字典,設置默認值

# Django admin、form表單的應用記錄