P30,用户添加(原始方法)
{% extends 'layout.html' %}
{% block content %}
<div class="container">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">新建用户</h3>
</div>
<div class="panel-body">
<form action="/user_add/" method="POST">
{% csrf_token %}
<div class="form-group">
<label>姓名</label>
<input type="text" class="form-control" name="name" placeholder="姓名">
</div>
<div class="form-group">
<label>密码</label>
<input type="text" class="form-control" name="password" placeholder="密码">
</div>
<div class="form-group">
<label>年龄</label>
<input type="text" class="form-control" name="age" placeholder="年龄">
</div>
<div class="form-group">
<label>余额</label>
<input type="text" class="form-control" name="account" placeholder="余额">
</div>
<div class="form-group">
<label>入职时间</label>
<input type="text" class="form-control" name="time" placeholder="入职时间">
</div>
<div class="form-group">
<label>性别</label>
<select class="form-control" name="gender">
{% for item in gender_choices %}
<option value="{{ item.0 }}">{{ item.1 }}</option>
{% endfor %}
</select>
</div>
<div class="form-group">
<label>所属部门</label>
<select class="form-control" name="department">
{% for item in depart_list %}
<option value="{{ item.id }}">{{ item.title }}</option>
{% endfor %}
</select>
</div>
<button type="submit" class="btn btn-default">提交</button>
</form>
</div>
</div>
</div>
{% endblock %}
def user_add(request):
if request.method == "GET":
context = {
'gender_choices': models.UserInfo.gender_choices,
'depart_list': models.Department.objects.all(),
}
return render(request, 'user_add.html', context)
else:
name = request.POST.get('name')
password = request.POST.get('password')
age = request.POST.get('age')
account = request.POST.get('account')
time = request.POST.get('time')
gender = request.POST.get('gender')
department = request.POST.get('department')
models.UserInfo.objects.create(
name=name,
password=password,
age=age,
account=account,
create_time=time,
gender=gender,
department_id=department,
)
return redirect('/user_list/')
P31,Form和ModelForm组件
存在的问题:
用户提交的数据没有校验(可能为空,非法)
错误没有错误提示
每一个字段都需要重新写一遍
关联的数据需要手动获取展示在前端页面
Django组件
Form(小简便)上面前三项
ModelForm(最简便)
def MyForm(Form):
user = forms.CharField(widget=forms.Input)
pwd = forms.CharField(widget=forms.Input)
email = forms.CharField(widget=forms.Input)
def user_add(request):
if request.method == 'GET':
form = MyForm()
return render(reqeust, 'user_add.html, {'form': form})
Form优化
<form method="POST">
{{ form.user }}
{{ form.pwd }}
{{ form.email }}
<!--自动生成-->
<input type="text" placeholder="姓名" name="user" />
</form>
<!--更简单的写法-->
<form method="POST">
{% for field in form %}
{{ field }}
{% endfor %}
<input type="text" placeholder="姓名" name="user" />
</form>
ModelForm(数据库操作)
class MyForm(ModelForm):
# 自定义字段
xx = form.CharField('')
model = UserInfo
fields = {"name", "password", "age"}
def user_add(request):
if request.method == 'GET':
form = MyForm()
return render(reqeust, 'user_add.html, {'form': form})