# Django admin、form表單的應用記錄
阿新 • • 發佈:2018-08-29
表單 gets 使用 查找 圖片 clas quest ali password
目錄
- Django admin、form表單的應用記錄
- 一 Django admin
- 1. 使用介紹
- form組件使用
- 1. form的作用
- 2. form組件生成HTMKL代碼
- 3. form組件校驗數據有效性
- 3. form組件如何給html標簽設置默認值
- 一 Django admin
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的作用
- 生成HTML代碼
- 幫我們做數據有效性的校驗
- 保留上次輸入的內容,顯示錯誤提示
2. form組件生成HTMKL代碼
3. form組件校驗數據有效性
1. 內置的校驗規則
內置的校驗規則
1. require=True 該字段必填
2. max_length 該字段最大長度
3. min_length 該字段最小長度
2. 自定義校驗規則(正則)
- 手機號的格式校驗 利用內置的正則校驗
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}$‘, ‘手機號碼格式不正確‘)] #自定義校驗規則
)
- 手機號的唯一性校驗
自定義校驗規則
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)函數做校驗
- 局部鉤子
class BookForm(forms.Form):
def a
pass
# 自定義一個局部鉤子函數
def clean_title(self):
value = self.cleaned_data.get(‘title‘)
if ‘jpm‘ in value:
raise ValidationError(‘jpm已被河蟹‘)
- 全局鉤子
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表單的應用記錄