【问题标题】:Python naming conventionsPython 命名约定
【发布时间】:2013-10-16 08:29:35
【问题描述】:

我正在使用 Flask-Restful 在我的 python 应用程序中实现 REST api。我有一个模型模块、一个业务模块和一个控制器模块。这是我在 login_controller.py 文件中定义的控制器之一

from flask.ext.restful import Resource,request,reqparse
from app.business.login import Login
from app.models.models import User, Address

class Login_Controller(Resource):

    def __init__(self):
        pass
    def get(self):
        loginBO=Login()
        obj=loginBO.getAllUsers()
        return {"users":obj}, 201
    def post(self):
       pass
    def delete(self):
        loginBO=Login()
        status =loginBO.deleteUser(request.json)
        if status:
            return {"status":"true"},201
        else:
            return {"status":"false"},401
    def put(self):
        loginBO=Login()
        status =loginBO.addUser(request.json)
        if status:
            return {"status":"true"},201
        else:
            return {"status":"false"},401

现在我对将上面的文件命名为 controller 不是很满意?什么是“PYTHONIC”方式来

  1. 为文件命名
  2. 为类命名。

我见过一些人将这些类命名为视图。如果我正在路由到模板,但这似乎很好,但我提供的是普通的旧 json?你们怎么说?

【问题讨论】:

  • login_controller.py 怎么样 -> controller.pyLogin_Controller -> Login?
  • 但是业务逻辑已经在 login.py 模块中了?如何区分这个和业务模块?
  • 你能展示你的项目结构吗?
  • 如果你不想在你的类中包含“Controller”这个词,并且你已经有一个登录模块,那么你总是可以将这个类命名为 Authorization 或简称 Auth,然后使用authorization.py 和你的路由 /api/authorization

标签: python flask flask-restful


【解决方案1】:

Python 标准命名约定在PEP 8 中显示。您询问了文件名和类名。 package and module names 的约定(通常是您的文件名):

模块应该有简短的全小写名称。下划线可以 如果它提高可读性,则在模块名称中使用。 Python 包 还应该有简短的全小写名称,尽管使用 不鼓励使用下划线。

由于模块名称映射到文件名,并且某些文件系统是 不区分大小写并截断长名称,重要的是模块 名称选择相当短——这在 Unix 上不是问题, 但是当代码传输到旧的 Mac 或 Windows 版本,或 DOS。

当一个用 C 或 C++ 编写的扩展模块有一个附带的 提供更高级别的 Python 模块(例如,更面向对象) 接口,C/C++ 模块有一个前导下划线(例如_socket)。

对于class names

几乎无一例外,类名都使用 CapWords 约定。 内部使用的类还有一个前导下划线。

就是这样。对于您是否将其称为“控制器”或“视图”或“资源”,或者即使您在名称中甚至有诸如“控制器”或“视图”之类的东西,没有任何约定。这里没有官方的“python 约定”,特别是考虑到 Web 应用程序只是 Python 可以做的一小部分。只要您项目中的其他开发人员了解“控制器”与“视图”的含义,您就可以了。不要过度思考这个问题,也不要指望别人对什么命名有正确的答案;这只是我们作为开发人员的负担:)

但是,如果您将其命名为 LoginController,请确保它是 LoginController,而不是 Login_Controller

【讨论】:

  • 非常感谢您提供如此详细的回答。现在我应该将所有控制器类放在一个模块中,将类似的控制器分组到一个模块中,还是将每个控制器放在一个单独的模块中。
  • @BadLuckBrian:再一次,这完全取决于你。做你认为最有效的事情。您可以随时更改它。
【解决方案2】:

你可以按照 PEP 8 (http://www.python.org/dev/peps/pep-0008/#package-and-module-names),它是更多 pythonic 的方式。你也可以用Google Style Guide,我觉得还可以。

在这种特定情况下,我会为 所有 控制器使用一个名为 controller 的文件,并且我的类将命名为 Login。但是,如果你真的更喜欢 login.py 作为你的模块,那么我认为最好用 Controller 命名你的控制器。

【讨论】:

    猜你喜欢
    • 2015-02-19
    • 2010-10-14
    • 2010-09-15
    • 2023-03-02
    • 2016-07-22
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多