自定义Django工作流
我是Django的新手,已经编写了登录/注册程序 目前,单击submit按钮登录时,我会被导航到一个页面自定义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),不管用户是登录、注册还是注销。我该
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
文件: