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
)

校验

原文地址:https://www.cnblogs.com/ZN-225/p/14569330.html