Helpers - компьютеры, интернет, программирование

login_exempt_urls не работает в моем промежуточном программном обеспечении

Я пытаюсь написать функцию в своем промежуточном программном обеспечении, поэтому, когда пользователь не вошел в систему, он все равно может зарегистрироваться на сайте. Однако с этим кодом «регистрация» по-прежнему перенаправляет меня на учетные записи/логин. Если бы вы могли помочь.

URL.py:

from . import views
from django.contrib.auth.views import (
LoginView, LogoutView, PasswordResetView, PasswordResetDoneView,
PasswordResetConfirmView, PasswordResetCompleteView)
from django.urls import path

urlpatterns = [
    path('', views.home, name="home"),
    path('explore/', views.explore, name='explore'),
    path('login/',LoginView.as_view(template_name='accounts/login.html'), name='login'),
    path('logout/', LogoutView.as_view(template_name='accounts/logout.html'), name='logout'),
    path('register/', views.register, name='register'),
    path('profile/', views.view_profile, name='profile'),
    path('profile/edit/', views.edit_profile, name='profile-edit'),
    path('change-password/', views.change_password, name='change-password'),
    path('reset-password/', PasswordResetView.as_view(), name='reset-password'),
    path('reset-password/done/', PasswordResetDoneView.as_view(), name='password_reset_done'),
    path('reset-password/confirm/<uidb64>/<token>/',
         PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
    path('reset-password/complete/', PasswordResetCompleteView.as_view(), name='password_reset_complete'),
]

Custom_middleware.py:

from django.conf import settings
from django.shortcuts import redirect


  EXEMPT_URLS = [settings.LOGIN_URL.lstrip('/')]
  if hasattr(settings, 'LOGIN_EXEMPT_URLS'):
  EXEMPT_URLS += [url for url in settings.LOGIN_EXEMPT_URLS]


class LoginRequiredMiddleware:

   def __init__(self, get_response):
    self.get_response = get_response

   def __call__(self, request):
    response = self.get_response(request)
    return response

   def process_view(self, request, view_func, view_args,   view_kwargs):
    assert hasattr(request, 'user')
    path = request.path_info.lstrip('/')
    print(path)

    if not request.user.is_authenticated:
        if path not in EXEMPT_URLS:
            return redirect(settings.LOGIN_URL)

settings.py

MIDDLEWARE = [

'tutorial.middleware.LoginRequiredMiddleware',

]

LOGIN_REDIRECT_URL = '/accounts/'

LOGIN_URL = '/accounts/login/'

LOGIN_EXEMPT_URLS = (

      r'^register/$',

 )

Спасибо

24.05.2019

  • когда вы пишете path not in EXEMPT_URLS, это не соответствует регулярному выражению. Поскольку вы печатаете path, вы, вероятно, видите, что это не та же строка, что и '^register/$'. Вы должны отметить re.match или re.search (см. здесь) для каждой записи. в EXEMPT_URLS 24.05.2019
  • спасибо, я попытался добавить путь вместо регулярного выражения, будет ли это правильным способом? и если да то как форматировать? 24.05.2019
  • использование регулярных выражений в порядке, если вы пытаетесь сопоставить их с помощью библиотеки re, как я упоминал выше. Я не понимаю, что вы имеете в виду добавить путь. 24.05.2019
  • извините, я имел в виду «использовать»... хорошо. Спасибо за вашу помощь 24.05.2019
  • спасибо за помощь у меня получилось! 24.05.2019

Ответы:


1

Как упоминалось выше @dirkgroten, вам нужно будет попытаться сопоставить путь с каждым из регулярных выражений в кортеже LOGIN_EXEMPT_URLS. Однако, поскольку Django уже сопоставляет путь к представлению, вы можете сопоставить имена представлений, чтобы вам не пришлось использовать регулярные выражения.

Таким образом, ваш LOGIN_EXEMPT_URLS вместо этого может быть списком имен представлений, например. ('register',). Затем вы можете проверить, находится ли ваше имя представления в LOGIN_EXEMPT_URLS с if view_func.__name__ in LOGIN_EXEMPT_URLS:.

24.05.2019
  • спасибо, мне удалось отсортировать его, добавив несколько вещей, используя re. Лучший. Джозеф 24.05.2019
  • @JShen круто. Я бы по-прежнему рекомендовал вам использовать имя представления вместо пути маршрута. Его производительность должна быть выше, и если шаблоны маршрутов вашего LOGIN_EXEMPT_URLS когда-либо изменятся, вам не придется менять их и в вашем settings.py. 24.05.2019
  • Новые материалы

    Интуитивное понимание тензоров в машинном обучении
    Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

    Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
    Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

    Почему объяснимость так важна прямо сейчас?
    По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

    Анимированный математический анализ
    Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

    Создание простого слайдера изображений с помощью JavaScript
    Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

    Создание базы данных с помощью супергероя «Python»
    В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

    ИИ для чайников: руководство для начинающих по пониманию будущего технологий
    Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..