用于登录,注销,注册(不是特定于应用程序的URL)的django urls.py结构:在用户应用程序或项目默认应用程序中?

时间:2015-03-17 07:08:38

标签: django django-urls

问题

我正在管理一个小型的django项目。我们的团队对这个问题有不同意见:

  

这是推荐登录,注销,注册(不是特定于应用程序的路由器)的方法吗?

   # Login, Logout
    url(r'^login/$', 'users.views.login_view', name='login'),
    url(r'^logout/$', 'users.views.logout_view', name='logout'),
    url(r'^signup/$', 'users.views.signup', name='signup'),

1。 MY_PROJECT> urls.py

  

原因:应该看到MY_PROJECT/urls.py中的整体网址和登录,注销,注册不是特定于应用的网址。

2。 users> urls.py

  

原因:应该将登录,注销和注册移动到用户应用程序,因为视图是在users/views.py中实现的,并且它是模块化视图中的首选方式。

文件夹结构

.
├── MY_PROJECT
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py
└── users
    ├── __init__.py
    ├── models.py
    ├── urls.py
    └── views.py

实施的附加信息

用户应用程序用于使用UserProfile扩展基本用户

from django.db import models
from django.contrib.auth.models import User


class UserProfile(models.Model):
    user = models.OneToOneField(User, unique=True, primary_key=True)
    and so on ...

并且还要花费默认登录,注销和注册视图。例如:

def login_view(request):
    return default_login_view(
        request, template_name="users/login.html"
    )


def logout_view(request):
    logout(request)
    return redirect("home")

1 个答案:

答案 0 :(得分:0)

如果您将项目的所有常规网址放在MY_PROJECT / urls.py中,此文件的行数会增加很多。然后,当您需要跟踪特定网址时,查看此文件可能很难。

因此,如果MY_PROJECT / urls.py中的所有网址都采用以下格式,您可以节省大量时间搜索特定网址,而且您的代码也更清晰。

(r'^foo/', include('foo.urls')),

但是,如果您的用户应用程序很大,那么如果您使用单独的 urls.py 进行登录/注销/注册,则可能是更好的方法。这意味着在用户应用中将 urls.py auth_urls.py 分开。