-1

我是 Django 的新手,已经编写了登录/注册程序。

目前,在单击提交按钮登录时,我被导航到一个页面www.example.com/login。同样,当我尝试注销时,注销成功并且 URL 为www.example.com/logout. 成功注册后,URL和函数使用相同的模板www.example.com/register。我知道这是因为我以这种方式修改了网址。registerloginurls.py

www.example.com无论用户登录、注册还是注销,我都希望保持 url 相同 ( )。我怎样才能做到这一点?

这是我的urls.py文件:

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

    from django.contrib import admin
    admin.autodiscover()

    urlpatterns = patterns('',
        url(r'^$', 'website.views.home', name='home' ),
        url(r'^admin/', include(admin.site.urls)),
        url(r'^login/$', 'website.views.user_login'),
        url(r'^register/$', 'website.views.user_register'),
        url(r'^logout/$', 'website.views.user_logout'),
    )

    from django.contrib.staticfiles.urls import staticfiles_urlpatterns
    urlpatterns += staticfiles_urlpatterns()

我的views.py文件:http ://dpaste.com/1196312/

4

2 回答 2

1

看看django-multiurl。这个包允许对不同的视图使用相同的 url。

我认为,在您的情况下,您可能需要创建一个额外的视图来在 GET 请求上呈现登录和注册表单。

以下是如何开始:

网址.py:

from multiurl import multiurl

urlpatterns = patterns('',
    url(r'^$', 'website.views.home', name='home' ),
    url(r'^admin/', include(admin.site.urls)),
    multiurl(
        url('/your_single_auth_url/$', 'website.views.user_logout'),
        url('/your_single_auth_url/$', ''website.views.show_register_or_login_forms'),
        url('/your_single_auth_url/$', ''website.views.user_login'),
        url('/your_single_auth_url/$', ''website.views.user_register'),
    )
)

视图.py:

from multiurl import ContinueResolving
from django.http import Http404


def user_logout(request):
    if request.user.is_authenticated():
        logout(request)
        return render_to_response('index.html', RequestContext(request))
    else:
        # continue to search needed view
        raise ContinueResolving


def show_register_or_login_forms(request):
    if request.method == 'GET':
        # on GET request show two forms, one for register and one for login
    else:
        raise ContinueResolving

def user_login(request):
    if request.method == 'POST':
        # check, if login form was submitted here
        if is_login_form:
            # login user here
        else:
            raise ContinueResolving
    else:
        raise Http404

def user_register(request):
    if request.method == 'POST':
        # check, if register form was submitted here
        if is_register_form:
            # register user here
        else:
            raise Http404
    else:
        raise Http404
于 2013-05-23T10:22:30.120 回答
0

也许您应该尝试 ClassBasesViews 并执行以下操作:

class Website(View):
    def get(self, request, *args, **kwargs):
        # Your Website Code
        pass

    def post(self, request, *args, **kwargs):
        # Register Code

    def delete(self, request, *args, **kwargs):
        # Logout Code

    def put(self, request, *args, **kwargs):
        # Login Code

比你有 4 个 Actions Urls (Rest) 现在你只需要将正确的方法传递给你的表单,它就会正确地做到这一点,你的 url 也需要一些升级:

url(r'^$', 'Website.as_view()', name='home' ),

剩下的就不需要了

于 2013-05-23T10:24:38.280 回答