我刚开始使用 Django,发现在用户身份验证方面我不太了解(使用典型的django.contrib.auth机制)。
当我创建一个“网站”使用
django-admin.py startproject mysite
我知道我创建了类似“服务器”的东西。然后,我需要创建一个应用程序(如“入门”教程中所述)。我为应用程序创建模型,而不是为服务器创建模型。我的想法(这可能是完全错误的)是应用程序之间是相当独立的(彼此非常隔离)。我为每个应用程序创建我的模型,每个应用程序都有一组不同的“视图”,等等。
但是当涉及到用户管理时,这种管理似乎对整个项目(或“服务器”)来说是全局的:所有的设置都是通过全局settings.py
文件指定的,内置的登录页面存储在全局templates/
目录中......如果我有两个应用程序并且我希望它们的登录页面具有不同的方面怎么办?如果在成功登录后,我想根据用户尝试登录的应用程序重定向到app#1的特定页面或app#2的另一个特定页面怎么办?也许我误解了 Django 应用程序背后的整个概念?
基本上,我mystartapp
在一个名为myserver
. 我正在使用内置登录视图,将表单发送到"django.contrib.auth.views.login"
. 使用默认配置,成功登录试图将我重定向到http://127.0.0.1:8000/accounts/profile/
我没有的。
settings.py
我可以通过编辑全局文件和全局文件找到解决方法urls.py
:
---------- settings.py ----------
[ . . . ]
# User Logging in Settings
LOGIN_URL = '/login'
LOGIN_REDIRECT_URL = '/'
[ . . . ]
---------------------------------
和
------------ urls.py ------------
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'myserver.views.home', name='home'),
# url(r'^myserver/', include('myserver.foo.urls')),
# Uncomment the admin/doc line below to enable admin documentation:
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
#The following line will include the urls for the "mystartapp" application
url(r'^s', include('mystartapp.urls', namespace="mystartapp")), #Dirty trick
url(r'^mystartapp/', include('mystartapp.urls', namespace="mystartapp")),
# Uncomment the next line to enable the admin:
url(r'^admin/', include(admin.site.urls)),
url(r'^login/$', 'django.contrib.auth.views.login'),
)
------------------------------
这样,多亏了第 10 行(带有#'Dirty trick'
注释的行),所有到根目录的内容127.0.0.1:8000/
都将被重定向到与我使用的相同的一组 url 127.0.0.1:8000/mystartapp/
,它与 中的 LOGIN_REDIRECT_URL = '/'
选项相结合settings.py
,最终将使浏览器在正确登录后重定向到127.0.0.1:8080/mystartapp/index.html
,但这似乎并不“干净”。
有没有更好的方法来建立重定向127.0.0.1:8080/mystartapp/index.html
?肮脏的把戏真的是肮脏的把戏还是它应该起作用的方式?我在这里错过了什么吗?(不过,我很确定最后一个问题的答案是“是的!”)
先感谢您。