Можно ли еще как то вызвать views и получить форму\шаблон, кроме как прямого обращения через url?
Приветсвую.
Долбаюсь вторые сутки, никто не может помочь.
Есть такое приложение, django-allauth для логина\регистрации. Я хочу прилепить форму логина\регистрации в виде dropdown блока к меню в верхней части сайта (как у твитера).
Я знаю только 1 метод, как можно обратиться к views приложения - это сделать запрос по url. Проблема в том, что я не знаю (и даже не имею какого либо представления), как сделать этот запрос по url из меню, чтоб получить в ответ форму или шаблон с формой от allauth views.
На stackoverflow мне говорят, что нужно сделать свой views, но:
1) не объясняют зачем (а я не понимаю, потому как предполагаю, что можно использовать родной views от allauth)
2) даже если и напишу свой views, как к нему обратиться из меню? Хочу обратить внимание - хочу добавить логин форму не ссылкой, чтоб редиректило на форму логина, а хочу эту форму иметь на каждой странице сайта как компонент меню.
Все правильно, надо сделать отдельную вьюху для регистрации/авторизации. У твиттера так и сделано, если ввести не верные данные то пользователя перенаправит на отдельную страницу. А html-форму на главной странице сделать ручками, не прибегая к джанго.формс. Соответственно аттрибуту формы action присвоить урл вьюхи авторизации/регистрации. Если авторизация/регистрация прошла не успешно, то пусть пользователь пытается правильно заполнить данные на определенной вьюхе, если все прошло успешно, то редиректнуть его на нужную страницу.
hellmin: Я сейчас как раз делаю через form action.
У меня 2 вопроса:
1) Action валидацию сделать не может. Я хотел обратиться к forms, чтоб проводить валидацию прямо в dropdown блоке. Хотел полнофункциональное решение без использования site.com/account/login. Как я понимаю - это сделать сложно?
2) Можете объяснить, зачем делать отдельную вьюху, если есть уже из коробки в самой allauth? Почему я не могу обратиться к родной view, зачем обращаться к своей? Я не могу понять этого момента.
Спасибо.
1) Action - это путь на отдельную страницу и валидация проходит на отдельной странице(как у твиттера). На счет "полнофункциональное решение", тут можно попробовать сделать двумя способами:
1. Как советовал Pavel Denisov сделать context processor, чтобы можно было работать с джанго.формс. А для валидации передаваемых данных написать middleware который будет отлавливать каждое обновление/переход страницы и в случае если это нужный Пост запрос, то выполнять авторизацию.
2. Все равно сделать отдельную api вьюху, на которую будет отправляться ajax-ом данные, проверяться и возвращаться в формате json. В случае не верных данных выводить сообщение, а при успешной авторизации/регистрации делать javascript-ом редирект на нужную страницу, ну или просто обновление страницы.
2) На счет "родной" вьюхи от allauth я не знал. Этот пакет не использовал. Если там все есть из коробки, то конечно, что-то своё делать смысла нет.
Спасибо, вам и Pavel Denisov: что задали верное направление. И спасибо за развернутые ответы. Пока гуглил, как пользоваться процессором, нашел решение и через templatetag. Решение по сути такое же, как и в случае с процессором. Могли бы вы объяснить, когда лучше использовать процессор, а когда тег? Спасибо.
1) View для того чтоб авторизовать пользователя ф-ями login и т.д.
2) Ну сделайте форму какую хотите, и отправляйте данные через Пост на урл, привязаный к view авторизации
1. Если есть уже view, зачем его еще раз писать?
2. На данный момент я и отправляю ПОСТ на урл, но эта форма не делает валидацию данных - к примеру если ввести левый имеил или пароль, и нажать "Логин", то идет редирект на страницу логина. А я хочу, чтоб валидация проходила прямо в dropdown блоке
Андрей Воскресенский: Можно подробнее, в каком месте можно использовать if\else? Сейчас у меня получается так: кликом по меню открывается форма логина. Вводишь данные, после нажатия "Подтвердить", уходит ПОСТ запрос во view от AllAuth. Если валидация пройдена - логинимся и возвращаемся на страницу, с которой логинились, если не пройдена - редирект на родную страницу allauth (site.com/account/login) и там уже отображаются ошибки.