Как генерировать случайный URL-адрес в urls.py каждый раз, когда пользователь входит в систему (Django)? - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь создать случайный URL-адрес, к которому можно будет получить доступ только один раз после входа пользователя в систему.

Я использую django-sesame для генерации разных URL-адресов каждый раз, когда пользователь входит в систему. Для этого Я установил для параметра SESAME_ONE_TIME значение True в settings.py, и я могу перенаправить пользователя на случайный URL-адрес следующим образом:

views.py:

from django.contrib.auth.decorators import login_required
from django.shortcuts import render, redirect
from .models import my_model
from django.contrib.auth.forms import PasswordChangeForm
from django.contrib.auth import update_session_auth_hash
import sesame

@login_required()
def password_form(request):  

    url_extension = sesame.utils.get_query_string(request.user)

    if request.method == 'POST':
        form = PasswordChangeForm(request.user, request.POST)
        if form.is_valid():
            user = form.save()
            update_session_auth_hash(request, user)  
            return redirect('/success/' + url_extension)
    else:
        form = PasswordChangeForm(request.user)

    context = {'form': form}
    return render(request, "form.html", context)

Однако в urls.py я не знаю, как правильно добавить URL-адрес в urlpatterns. Возможно, это звучит странно, но из-за отсутствия лучшей формулировки можно ли каким-либо образом добавить параметр, который может принимать случайно сгенерированное значение в path, например:

urls.py:

from app.views import password_form

urlpatterns = [path('success/' + random_variable, password_form),]

Если нет, могу ли я сделать переменную url_extension глобальной, чтобы я мог использовать ее в urls.py, минуя необходимость request (например, установив url_extension как атрибут функции в views.py и использовать его как function.url_extension в urls.py)?

1 Ответ

0 голосов
/ 29 мая 2020

Вы должны использовать регулярное выражение, в котором вы разрешаете успех в начале и все после него. Ваше регулярное выражение в url-адресе будет примерно таким - success /.*$. Эта проверка успешна, а затем разрешает * (все) после /.

...