Как django LoginRequiredMixin использует шаблоны. Как мы можем передать context_data в шаблон формы входа в систему
Как django LoginRequiredMixin принимает шаблоны. Я не нашел ничего о том, как он принимает шаблоны.
Я добавил папку account в templates и затем LoginRequiredMixin принимает мой шаблон, но как это работает и как я могу передать контекстные данные в шаблон формы входа
LoginRequiredMixin ничего не отображает. Этот миксин просто перенаправляет на LOGIN_URL, установленный в настройках по умолчанию. Вы можете изменить url непосредственно в классе с помощью этого миксина следующим образом:
class MyView(LoginRequiredMixin, View):
login_url = '...'
По умолчанию, настройки login_url идут в LoginView из django.contrib.auth.views и используют registration/login.html. Таким образом, вы можете создать login.html в каталоге registration в вашем каталоге шаблонов для переопределения шаблона, используемого по умолчанию, если хотите
Что я сделал, так это передал контекстные данные в LoginRequiredMixin Шаблон показан ниже. Является ли это правильным подходом?
urls.py
path('login_url/', views.CustomLogin.as_view(),name='login'),
views.py
class SettingsPage(LoginRequiredMixin, TemplateView):
login_url = '/login_url/'
class CustomLogin(TemplateView):
template_name = 'login.html'
def get_context_data(self, **kwargs):
context = super(CustomLogin, self).get_context_data(**kwargs)
context['redirect_field_name'] = 'next'
context['redirect_field_value'] = self.request.get_full_path().split('=')[1]
return context
login.html
<form class="login form-signin" method="POST" action="/accounts/login/">
{% csrf_token %}
<input type="hidden" name="{{ redirect_field_name }}" value="{{redirect_field_value}}">
<h4 class="form-signin-heading text-center">Login</h4>
<input class="form-control mb-2" type="text" name="login" id="id_login">
<input class="form-control" type="password" name="password" id="id_password">
<button class="btn btn-lg btn-primary btn-block" type="submit" >Login</button>
</form>
Здесь он будет автоматически перенаправлять на redirect_field_value после входа