目录
- 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实例传一个字典,设置默认值
原文地址:https://www.cnblogs.com/wangph/p/9551696.html
时间: 2024-10-12 12:41:50