我正在用Django编写一个图书数据库,最终是一个图书馆系统。当一本书是在没有标题集的情况下创建的,ISBN将被用来从WorldCat自动获取图书数据--我刚刚创建了一个表单来向数据库中添加新书,但是它没有真正的错误处理。而且,由于我是Django的新手,我怀疑我把很多代码放在了错误的地方。
改进错误处理是我的主要动机,但任何其他改进都将受到欢迎。
表格,在forms.py中:
class AddBookForm(ModelForm):
"""docstring for AddBookForm"""
class Meta:
model = Book
fields = ['isbn']表单视图,在views.py中:
# This defines the navbar
pages = [['Search', '/'], ['Add Book', '/add']]
def add_book(request):
if request.method == 'POST':
# create a form instance and populate it with data from the request:
form = AddBookForm(request.POST)
# check whether it's valid:
if form.is_valid():
# process the data in form.cleaned_data as required
addedBook = form.save()
# if a GET (or any other method) we'll create a blank form
else:
form = AddBookForm()
# Highlights navbar entry
pages[1].append(True)
context = {'pages': pages, 'form': form,}
if 'addedBook' in locals():
context['added'] = addedBook
else:
context['added'] = None
return render(request, 'library/add.html', context)表单模板(add.html):
{% extends "library/base_site.html" %}
{% block title %}Add book{% endblock %}
{% block content %}
{% if added %}
<div class="alert alert-success" role="alert">
<button type="button" class="close" data-dismiss="alert">
<span aria-hidden="true">×</span>
<span class="sr-only">Close</span>
</button>
Succesfully added book "{{ added.title }}" by {{ added.author }} - ISBN {{ added.isbn }}
</div>
{% endif %}
<form role="form" method="post" action=".">
{% csrf_token %}
<div class="form-group">
<label for="id_isbn">Isbn</label>
<input id="id_isbn" class="form-control" maxlength="13" name="isbn" type="text" placeholder="Enter ISBN or scan barcode">
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
{% endblock %}整个项目是可在GitHub上获得。
发布于 2014-09-25 06:58:57
这有点奇怪,而且比需要的复杂得多:
如果' addedBook‘在局部变量()中: context“补充道” =addedBook“补充道”= None
您可以初始化addedBook = None,并简化上面的操作,而无需使用locals():
addedBook = None
# validation, possibly setting: addedBook = form.save()
context['added'] = addedBook不用说,这个"docstring“是无用的:
“AddBookForm的docstring”
当前的错误处理只是检查表单是否有效。表单类是非常基本的,因此只有标准验证才会被应用,例如,根据底层模型,整数字段的非整数值将引发验证错误。
至少,最好告诉用户验证错误,如果有的话。在当前代码中,如果表单无效,它只是再次打印相同的表单,而不向用户提供错误的线索,这对用户不太友好。
文档中的这一页涉及表单验证的基础知识,并包括显示表单验证错误的示例:
https://docs.djangoproject.com/en/1.7/topics/forms/
此页面更详细,更具体地介绍了模型表单:
https://docs.djangoproject.com/en/1.7/topics/forms/modelforms/
我建议你重读一遍,然后:
https://codereview.stackexchange.com/questions/63824
复制相似问题