首页 文章

在项目和应用程序之间配置Django URL

提问于
浏览
1

我想从Django教程中向mysite / polls项目添加一个帐户应用程序 . 当我添加“帐户”应用程序来管理用户身份验证时,我无法正确设置网址 .

我的根URLconf是:

from django.conf.urls import patterns, include, url
from django.contrib import admin

urlpatterns = patterns(
    '',
    # Examples:
    # url(r'^$', 'uniVote.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),
    url(r'^elections/', include('elections.urls', namespace='elections')),
    url(r'^admin/', include(admin.site.urls)),
    # ex: accounts/...
    url(r'^accounts/', include('accounts.urls')),
)

我的帐户应用中的URLconf是:

from django.conf.urls import patterns, url

urlpatterns = patterns(
    '',
    # ex: /accounts/login/
    url(r'^accounts/login/$', 'accounts.views.user_login'),
    # ex: /accounts/logout/
    url(r'^accounts/logout/$', 'accounts.views.user_logout'),
    # ex: /accounts/register/
    url(r'^accounts/register/$', 'accounts.views.user_register'),
    )

另外,这是我的帐户views.py:

from django.http import HttpResponse, HttpResponseRedirect
from django.contrib.auth import authenticate, login, logout
from django.shortcuts import render_to_response
from django.core.context_processors import csrf

#Import a user registration form
from accounts.forms import UserRegisterForm


# User Login View
def user_login(request):
    if request.user.is_anonymous():
        if request.method == 'POST':
            username = request.POST['username']
            password = request.POST['password']
            #This authenticates the user
            user = authenticate(username=username, password=password)
            if user is not None:
                if user.is_active:
                    #This logs him in
                    login(request, user)
                else:
                    return HttpResponse("Not active")
            else:
                return HttpResponse("Wrong username/password")
    return HttpResponseRedirect("/")


# User Logout View
def user_logout(request):
    logout(request)
    return HttpResponseRedirect('/')


# User Register View
def user_register(request):
    if request.user.is_anonymous():
        if request.method == 'POST':
            form = UserRegisterForm(request.POST)
            if form.is_valid:
                form.save()
                return HttpResponse('User created succcessfully.')
        else:
            form = UserRegisterForm()
        context = {}
        context.update(csrf(request))
        context['form'] = form
        #Pass the context to a template
        return render_to_response('accounts/register.html', context)
    else:
        return HttpResponseRedirect('/')

每当我将浏览器指向:0.0.0.0:8080/accounts/register时,我都会收到404错误以及以下输出:

使用uniVote.urls中定义的URLconf,Django按以下顺序尝试了这些URL模式:

  • ^选举/

  • ^ admin /

  • ^ accounts / ^ accounts / login / $

  • ^ accounts / ^ accounts / logout / $

  • ^ accounts / ^ accounts / register / $

当前URL,accounts / register /与这些中的任何一个都不匹配 .


从教程中,我相信addr:port / accounts / register会加载root URLconf并查看'accounts'并加载accounts / urls.py并传递'register'并查看第三个url模式并加载accounts.views.user_register .

我有什么东西可以到达帐户/ ...网址吗?

1 回答

  • 3

    目前,您的应用程序已配置为在 accounts/accounts/register/ url中查看 .

    从您的代码中,URL的正则表达式重复了“帐户” .

    基本上你应该尝试:

    url(r'^accounts/', include('accounts.urls'))

    然后从帐户网址中删除“帐户” .

    urlpatterns = patterns(
        '',
        # ex: /accounts/login/
        url(r'^login/$', 'accounts.views.user_login'),
        # ex: /accounts/logout/
        url(r'^logout/$', 'accounts.views.user_logout'),
        # ex: /accounts/register/
        url(r'^register/$', 'accounts.views.user_register'),
        )
    

相关问题