【发布时间】:2020-06-01 02:58:17
【问题描述】:
两种方法有什么区别,哪种方法更适合长期使用?有没有比其他的优势?
添加五线谱:
(第一种方法)
views.py
def add_staff(request):
return render(request, 'hod_template/add_staff_template.html')
def add_staff_save(request):
if request.method != 'POST':
return HttpResponse('Method not allowed')
else:
first_name = request.GET.get('first_name')
last_name = request.GET.get('last_name')
username = request.GET.get('username')
email = request.GET.get('email')
password = request.GET.get('password')
address = request.GET.get('address')
try:
user = CustomUser.objects.create_user(username=username, password=password, email=email, last_name=last_name, first_name=first_name, user_type=2)
user.staffs.address = address
user.save()
messages.success(request, 'Staff Added Successfully')
return HttpResponseRedirect('/add_staff')
except:
messages.error(request, 'Failed to Add Staff')
return HttpResponseRedirect('/add_staff')
urls.py
path('add_staff/', add_staff),
path('add_staff_save/', add_staff_save),
add_staff.html
<form role="form" action="/add_staff_save">
{% csrf_token %}
<div class="card-body">
<div class="form-group">
<label>Email address</label>
<input type="email" class="form-control" name="email" placeholder="Enter email">
</div>
<div class="form-group">
<label>Password</label>
<input type="password" class="form-control" placeholder="Password" name="password">
</div>
<!-- same for first_name, last_name, username, address -->
<div class="card-footer">
<button type="submit" class="btn btn-primary btn-block">Add Staff</button>
</div>
</div>
</form>
(第二种方法)
在forms.py中创建一个包含first_name、last_name、username、address所有字段的表单
然后调用视图并验证它。
forms.py
class StaffForm(forms.ModelForm):
class Meta:
model = Staff
fields = ('first_name', 'last_name', 'username', 'address')
views.py
def add_staff(request):
if request.method == 'POST':
form = StaffForm(data=request.POST)
if form.is_valid():
messages.success(request, 'Staff Added Successfully')
form.save()
else:
form = StaffForm()
return render(request, 'staff.html', {'form':form})
urls.py
path('add_staff/', add_staff),
staff.html
<form role="form" action="/">
{% csrf_token %}
{{ form.as_p }} <!-- render form as paragraph -->
</form>
两种方法都运行良好,并且人员模型具有所有必填字段。 很抱歉这个问题太长了,因为我没有添加员工模型。如果你需要请告诉我。
【问题讨论】:
标签: django django-views