首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >图书馆系统的图书数据库

图书馆系统的图书数据库
EN

Code Review用户
提问于 2014-09-25 03:36:31
回答 1查看 957关注 0票数 2

我正在用Django编写一个图书数据库,最终是一个图书馆系统。当一本书是在没有标题集的情况下创建的,ISBN将被用来从WorldCat自动获取图书数据--我刚刚创建了一个表单来向数据库中添加新书,但是它没有真正的错误处理。而且,由于我是Django的新手,我怀疑我把很多代码放在了错误的地方。

改进错误处理是我的主要动机,但任何其他改进都将受到欢迎。

表格,在forms.py中:

代码语言:javascript
复制
class AddBookForm(ModelForm):

    """docstring for AddBookForm"""

    class Meta:
        model = Book
        fields = ['isbn']

表单视图,在views.py中:

代码语言:javascript
复制
# 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):

代码语言:javascript
复制
{% 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上获得

EN

回答 1

Code Review用户

回答已采纳

发布于 2014-09-25 06:58:57

这有点奇怪,而且比需要的复杂得多:

如果' addedBook‘在局部变量()中: context“补充道” =addedBook“补充道”= None

您可以初始化addedBook = None,并简化上面的操作,而无需使用locals()

代码语言:javascript
复制
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/

我建议你重读一遍,然后:

  1. 将表单错误的打印添加到HTML输出中
  2. 在窗体类中添加自定义验证方法,如果对您的用例有意义的话
票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/63824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档