Django视图的命名规范是什么?

6

我正在构建一个网站(使用Django),但对于函数的命名规范感到困惑。举个简单的例子:假设我有一个页面,让用户决定他们想看图像A还是图像B。一旦用户提交了决定,网站就会显示用户请求的图像。

这是我在视图模块中将拥有的两个函数:

def function1(request):
    """Returns the page that presents the user with the choice between A and B"""

def function2(request):
    """Takes in the submitted form and returns a page with the image the user requested."""

这种情况下,如何命名相应函数的约定是什么?我至少看到两种可行的方式:
选项1: function1: "decide", function2: "view_image" 选项2: function1: "view_choices", function2: "decide" 核心问题在于,这些函数中的每一个都会有两个任务:(1)处理并存储用户提交的数据,以及(2)返回下一页,该页可能与用户的输入相关或无关。因此,我应该根据(1)还是(2)来为我的函数命名呢?
4个回答

9
通常,约定使用一些CRUD(创建、检索、更新、删除)操作。我个人使用索引、详情、创建、更新、删除来执行操作。但是,我认为这不适用于您的自定义函数。
实际上,听起来您的函数应该合并到同一个“选择”函数中。然后,根据结果是否为POST,您可以显示表单或结果。
注意:我已经从django文档中关于表单处理的示例中大量复制了此示例。
def choose(request):
    """
    Presents the user with an image selection form and displays the result.
    """
    if request.method == 'POST': # If the form has been submitted...
        form = ChoiceForm(request.POST) # A form bound to the POST data
        if form.is_valid(): # All validation rules pass
            # Process the data in form.cleaned_data
            # ...
            return HttpResponseRedirect('/thanks/') # Redirect after POST
    else:
        form = ChoiceForm() # An unbound form

    return render_to_response('choose.html', {
        'form': form,
    })

谢谢Soviut!这可能正是我正在寻找的。但我在想——这个“选择”函数是否也包含返回带有图片的页面的代码,还是该代码属于另一个函数?(在我的情况下,我不会重定向到“/thanks/”。) - RexE
2
@RexE:如果表单是以POST方式提交的(如果它修改数据的话),那么在处理完数据后,你应该重定向到一个不同的视图来显示页面。否则,你会让用户看到混乱的信息,并且如果他们尝试刷新页面,可能会意外地执行多次操作。 - Carl Meyer
@Carl:在大多数情况下,我同意你的看法,除非你正在做类似于返回搜索结果,但仍然在页面顶部显示搜索框这样的事情,在这种情况下,重定向是不必要的。这可能是OP问题的情况。 - Soviut
2
@Soviut: 如果你只是展示一个搜索结果,那么应该使用 GET 而不是 POST。 - Carl Meyer

2

如果适用的话,我会使用类似内置视图(object_list、object_detail等)的东西。(这总是一个好主意)

其他部分将尽可能遵循该概念(item_action)。


1
只要你有这些好的注释,我相信这对你永远不会成为问题。
无论如何,最好根据函数的功能来命名函数,因此function1可以是“displayImageChoices”,function2可以是“displayImage”。
例如,function1接受一些输入并显示一些选项,function2接受一些输入并显示图像。

3
PEP8(http://www.python.org/dev/peps/pep-0008/)指出: “函数名应该用小写字母,单词之间可以用下划线分隔以提高可读性。只有在已经存在混合大小写的惯例时(例如 threading.py),才允许使用 mixedCase,以保持向后兼容性。” - Andy Baker
这是一个很好的观点,我一直在关注“名称传达的意思”,而不是camelCase/格式约定。 - Neil Trodden

-1
我知道这现在有点过时了,但自从转换为基于类的视图以来。
PEP8(python.org/dev/peps/pep-0008)类的命名约定应该是每个单词大写,没有空格。如果您仍然使用函数式视图,则应将小写函数名称用下划线替换空格以提高可读性。
例如,对于基于类的视图:
class MyClassBasedView():
    ...

基于函数的

def my_function_based_view():
    ...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接