2016-06-30 2 views
0

Я настроил django-allauth для входа через Facebook, Twitter и Google.Переопределение адресов Django-allauth для входа/регистрации с пользовательским URL/

Однако Джанго-allauth принимает запрос входа в систему только в /accounts/login/, подпишите запрос только на /accounts/signup/ и т.д. У меня есть модальную форму для входа в систему и регистрации на моей домашней странице, и я хочу использовать только.

enter image description here

Как использовать систему Джанго-allauth, чтобы Войти (как социальную, так и под заказ)/регистрацию и т.д. из модальной формы на моей домашней странице? Я ищу механизм, чтобы переопределить URL-адреса django-allauth и заменить их на мои страницы/URL-адреса.

Код here

Модальная форма HTML является here.

Этот вопрос, возможно, похож на this. Однако ответ в вопросе не слишком понятен.

После нескольких ответов, я сделал эти изменения:

#views.py 
def logreg(request): 
    context = { 
     'login_form': MyLoginForm(), 
     'signup_form': MySignupForm() 
    } 
    return render(request, 'login.html', context) 

#In URL Patterns of urls.py 
url(r'^login/', logreg, name='login'), 

In Index (from where call to the modal is to be made): 
<p>Welcome visitor <a href="#" data-modal-url="{% url 'login' %}">Login</a> or <a href="#">Register</a></p> 

Вся эта работа привела в этот беспорядок:

Internal Server Error: /login/ 
    Traceback (most recent call last): 
... 
    django.core.urlresolvers.NoReverseMatch: Reverse for 'ecomweb.home' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: [] 

During handling of the above exception, another exception occurred: 

... 
django.core.urlresolvers.NoReverseMatch: Reverse for 'home' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: [] 

Я гайками к тому, что происходит.

+0

Есть ли шаблон URL для «дома» в вашем urls.py и/или '{% url 'home'%}' где-то в вашем шаблоне? Можете ли вы показать немного больше своего кода? – raphv

+0

Вы решили это? Я столкнулся с той же проблемой – user3667089

+0

@ user3667089 Любые удачи в решении ??? Я сталкиваюсь с аналогичными проблемами ... – Jayesh

ответ

1

Хорошо, это довольно простое решение.

в urls.py сделать это:

from allauth.account.views import LoginView, SignupView 
 

 
urlpatterns = [ 
 
    ... 
 
    url(r'^customurl/login/', LoginView.as_view(), name="custom_login"), 
 
    url(r'^customurl/signup/', SignupView.as_view(), name="custom_singup"), 
 
    ... 
 

 
]

и в HTML создать форму:

<form action="{% url 'custom_signup' %}" method="POST"> 
 
    {{ form.as_p }} 
 
</form> 
 

 

 
<form action="{% url 'custom_login' %}" method="POST"> 
 
    {{ form.as_p }} 
 
</form>

+0

Модальная форма не имеет URL-адреса. Его срабатывает, когда посетитель нажимает «Войти». Что делать в таком случае? – FlyingAura

+0

Почему бы вам не сделать модальную форму ''? – raphv

+0

@raphv: Это уродует страницу вид (https://postimg.org/image/m14gqfinl/) Согласно вашему предложению, я заменил с '

Добро пожаловать посетитель Login или Register

' 'с ' – FlyingAura

0

Для использования входа или зарегистрируйтесь allauth в функциональности, вам не нужно переопределять связанные с ним URL-адреса.

Просто представить свою форму к адресам, связанным с allauth как

<form action="/accounts/login/?next{{request.path}}" method="POST"> 
    {% csrf_token %} 
    <!-- Your form elements here --> 
</form> 

<form action="/accounts/signup/?next{{request.path}}" method="POST"> 
    {% csrf_token %} 
    <!-- Your form elements here --> 
</form> 

Ее ДО использовать ? Следующая {{}} request.path, если вы хотите, чтобы пользователь, чтобы остаться на та же страница, с которой он вошел в

Обновлено Ответ.

Прежде всего не хранить шаблоны ввода nside статическая папка, это не очень хорошая практика.

Как я уже указывал, для использования функциональности allauth views вам необязательно переопределять его url и views (если не по конкретным причинам).

  1. Внутри шаблонах папки создать новую папку account с login.html файла.
  2. Вставьте свой html логин code в этот файл login.html.

  3. Удаления метод пользовательского метода входа logreg и связанные с ним url и imports.

  4. Изменить все ссылки, которые ссылаются на ваш пользовательский метод регистрации logreg с account_login (имя пользователя allauth).

  5. В вашем base.html - замените {% static 'login.html'%} на {% url 'account_login'%}.

И вы готовы к работе.

Но вы должны обрабатывать html для случая, когда пользователь пытается посетить страницу /accounts/login/.

Кроме того, вы всегда можете использовать подход thefallback для отправки вашей модальной формы входа через ajax-запрос на учетные записи/login/and handle success() и error().

0

Я думаю, вы можете назвать формы Джанго-allauth в вашем доме зрения

В views.py:

from django.allauth.account.forms import LoginForm, SignupForm 

def home(request): 
    context = { 
     'login_form': LoginForm(), 
     'signup_form': SignupForm(), 
    } 
    return render(request, "myapp/home.html", context) 

В домашнем шаблоне (например, templates/myapp/home.html):

<form action="{% url 'account_login' %}?next={% url 'home' %}" method="POST"> 
    {% csrf_token %} 
    {{login_form}} 
</form> 
<form action="{% url 'account_signup' %}?next={% url 'home' %}" method="POST"> 
    {% csrf_token %} 
    {{login_form}} 
</form> 

Тогда самое последнее, что у вас будут шаблоны Django-allauth blank по умолчанию, но вы можете их переопределить с помощью cr есть шаблон base.html в каталоге под названием account ваш каталог шаблонов приложений (например, myproject/templates/account/base.html. Я рекомендую использовать тот же шаблон, который вы используете для своего домашнего шаблона. Убедитесь, что этот account/base шаблона имеет следующий блок, который будет заполняться Джанго-allauth:

{% block content %} 
{% endblock %} 

Переопределением шаблонов allauth именно таким образом (который вы можете сделать на за конечную основу, если вы хотите) будет работать только если вы загрузите собственное приложение перед темallauth в вашем settings.py:

INSTALLED_APPS = [ 
    'django.contrib.admin', 
    ... 
    'myapp', 
    'allauth', 
    'allauth.account', 
    ... 
+0

Проблема заключается в том, что я хочу, чтобы форма входа в модальную (модальная не имеет URL-адреса, а другого html-файла). Это супер накладывает на сам индекс, как показано в изображение). Итак, как мне отобразить вид модальности без записи url.py? – FlyingAura

+0

Вызывая форму в виде и шаблоне, как в первой части моего ответа. – raphv

+0

Но как я могу назвать это из шаблона, когда нет URL! '

Добро пожаловать гость Login

' – FlyingAura

0

при попытке переопределить URL в urls.py, вы поместите переопределение выше или ниже «URL (г»^accounts/', include (' allauth.urls ')) "? Когда я попытался переопределить allauth в первый раз, я поместил свой код ниже этой строки, который не работает - выше этой строки.

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