自定义Django工作流

自定义Django工作流,django,django-templates,django-views,django-urls,Django,Django Templates,Django Views,Django Urls,我是Django的新手,已经编写了登录/注册程序 目前,单击submit按钮登录时,我会被导航到一个页面www.example.com/login。同样,当我尝试注销时,注销成功,URL为www.example.com/logout。成功注册后,URL为www.example.com/register,尽管register和login功能使用相同的模板。我知道这是因为我以这种方式修改了url.py中的URL 我想保持URL不变(www.example.com),不管用户是登录、注册还是注销。我该

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

目前,单击submit按钮登录时,我会被导航到一个页面
www.example.com/login
。同样,当我尝试注销时,注销成功,URL为
www.example.com/logout
。成功注册后,URL为
www.example.com/register
,尽管
register
login
功能使用相同的模板。我知道这是因为我以这种方式修改了
url.py
中的URL

我想保持URL不变(
www.example.com
),不管用户是登录、注册还是注销。我该怎么做

这是我的
url.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()
我的
视图.py
文件:

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

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

以下是如何开始:

URL.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'),
    )
)
views.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

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

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
现在,您只需将正确的方法传递到表单,它就能正确执行操作,您的url也需要一些升级:

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

那么剩下的就不需要了

您的意思是,在登录/注销/注册之后,需要重定向到一个url(
www.example.com
),或者需要在同一个url上执行所有操作。也就是说,如果用户已经登录,那么在这个url上他将被提示注销,如果没有,他可能会看到两个表单,一个用于登录,一个用于注册?@stable:后一个。目前,我已经在主页上显示了这两种形式。不过,我还是想让URL保持不变。如果要查看我的
views.py
文件: