# Django admin、form表单的应用记录

目录

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实例传一个字典,设置默认值

猜你喜欢

转载自www.cnblogs.com/wangph/p/9551696.html