Django之Form
Form
settings.py文件中静态文件配置
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
html中的form表单,action
不写默认往当前路径提交数据,method
设置请求方式。
Django自带的form
导入
from django import forms
# 定义form
class RegForm(forms.form):
user = forms.CharField(label='用户名', min_length=6) # 设置label标签的显示内容, min_length为设置的最小长度
pwd = forms.CharField(label='密码')
使用
# views.py文件中写函数
def register(request):
form_obj = RegForm()
return render(request, 'register.html', {‘form_obj’: form_obj})
如下,自动生成form中自己写的字段的标签
# register.html文件
<form action='', method='post'>
{% csrf_token %} # 跨域
{{ form_obj.as_p }} # 生成多个P标签,包含label input框
<button>注册</button>
</form>
自定义标签,其中定义form以及views中的内容都一样。HTML文件不同,如下:
<form action='', method='post' novalidate> # novalidate为不进行自带的校验,可以删掉,删掉以后就要进行自带的校验了
{% csrf_token %}
<p>
{{ form_obj.user.label }} # 生成label标签
{{ form_obj.user }} # 生成某个字段的input框
{{ form_obj.user.errors }} # 指定字段的错误提示信息,可能有多条
{{ form_obj.user.errors.0 }} # 指定字段的错误提示信息的第一条
</p>
<p>
{{ form_obj.pwd }}
</p>
{{ form_obj.errors }} # 全局的错误提示
<button>注册</button>
</form>
def register(request):
form_obj = RegForm()
if request.method == 'POST':
form_obj = RegForm(request.POST)
if form_obj.is_valid(): # is_valid 返回值为布尔值
form_obj.clean_date # 经过校验的数据
# 进行数据库的操作
return HttpResponse('注册成功')
return render(request, 'register.html', {‘form_obj’: form_obj})
常用字段与插件
label = '用户名' # 设置标签名
min_length = 6 # 设置最小长度
initial = 'oooo' # 设置初始值
error_messages = {
'min_length': '太短',
'required': '不能为空'
} # 自定义错误提示信息
from django.forms import widgets
pwd = forms.CharField(
label='密码',
min_length=6,
widget = widgets.PasswordInput() # 插件 指定字段的类型,比如密码输入框
)
# 单选
gender = forms.ChoiceField(
choices=((1, '男'), (2, '女'), (3, '其他')),
widget = widgets.RadioSelect
)
# 多选
hobby = forms.ChoiceField(
choices = ((1, '足球'), (2, '篮球'), (3, '乒乓球'), (3, '其他球')),
widget = widgets.SelectMultiple
)