2013-05-23 4 views
-1

Я новичок в Django и написал процедуры регистрации/регистрации.Пользовательский рабочий процесс Django

В настоящее время при нажатии кнопки отправки для входа в систему я перехожу на страницу www.example.com/login. Аналогичным образом, когда я пытаюсь выйти из системы, выход из системы завершается успешно, а URL-адрес - www.example.com/logout. При успешной регистрации URL-адрес равен www.example.com/register, хотя функции register и login используют один и тот же шаблон. Я знаю, это потому, что я изменил URL-адреса в urls.py таким образом.

Я хочу, чтобы URL-адреса были одинаковыми (www.example.com) независимо от того, входит ли пользователь в систему, регистрируется или выходит из системы. Как я могу это сделать?

Это мой 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/

+0

Вы имеете в виду, что ** после ** login/logout/register необходимо перенаправить на один URL-адрес ('www.example.com'), или это необходимо для ** выполнения ** всех действий на одном и том же URL-адресе , То есть если пользователь вошел в систему, то на этом единственном URL-адресе ему будет предложено выйти из системы, а если нет, он увидит, может быть, две формы: один для входа и один для регистрации? – stalk

+0

@stalk: Последний. В настоящее время я сделал домашнюю страницу, чтобы показать обе формы. Но все же, я хочу сделать URL таким же. Если вы хотите посмотреть мой файл 'views.py': http://dpaste.com/1196312/ – xan

ответ

1

Взгляните на django-multiurl. Этот пакет позволяет использовать тот же URL для разных видов.

Я думаю, что в вашем случае вам, вероятно, потребуется создать еще один вид для рендеринга регистрационных форм и регистрационных форм в запросе GET.

Вот как начать:

urls.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 
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 Действия Urls (Rest) Теперь вам просто нужно пройти правильные методы к формам, и он будет делать это правильно, и ваш URL необходимо обновление:

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

остальное не является необходимым, то

Смежные вопросы