Всем доброе утро
Я использую django logout () для завершения моих сессий так же, как django docs говорит:
views.py
class Logout(View):
def logout_view(request):
logout(request)
return HttpResponseRedirect(reverse('cost_control_app:login'))
И я звоню из этого URL:
Urls.py
url(r'^logout/$', views.Logout.as_view(), name = "logout"),
Buttttttt это не работает, когда я делаю трассировку, я нахожу, что функция:
def logout_view(request):
Он возвращает «нет» и вводит nos для выполнения кода внутри ...
Пожалуйста, помогите мне !
3 ответа
В Django есть встроенный {{X0 }} view. Я бы использовал это вместо того, чтобы писать свой собственный.
from django.contrib.auth import views as auth_views
from django.core.urlresolvers import reverse_lazy
url(r'^logout/$',
auth_views.logout,
{'next_page': reverse_lazy('cost_control_app:login')},
name='logout',
)
Если вы хотите написать свой собственный вид logout
, я бы остановился на представлении, основанном на функциях. Здесь нет необходимости использовать представление на основе классов. Документы по регистрации пользователя у есть пример.
def logout_view(request):
logout(request)
# Redirect to a success page.
Затем измените шаблон URL на
url(r'^logout/$', logout_view, name="logout"),
Если вы действительно хотите написать представление на основе классов, вам нужно исправить свое представление Logout
. Смотрите ответ Джои для получения дополнительной информации об этом.
Мне любопытно, почему у вас есть метод с именем logout_view()
? По умолчанию ничего не будет вызывать этот метод. Вам нужно изменить имя, чтобы оно соответствовало глаголу HTTP, который будет использоваться для вызова страницы. Например, если это будет GET
запрос, вы измените его на:
def get(self, request):
Если вы хотите, чтобы это был запрос POST, измените его на:
def post(self, request):
Это стандартный способ работы представлений классов в Django. Кроме того, вы можете посмотреть документацию для представлений на основе классов, так как это может дать вам лучшее представление об их работе и о том, что они могут предоставить вам. (Подсказка. Существует встроенный RedirectView а> )
Решил, я просто удалил выход из класса (View) и вызвал def из URL без «as_view», и это работает. Спасибо всем !
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.