Исходя из комментариев , вы неправильно понимаете, как CSRF реализован в Django.
необходимо предоставить шаблон csrf.Я пытался сделать это без этой строки, но я получил ошибку csrf.
Это правильно.Но вам не нужно добавлять это в контекстные переменные.Если вы используете 'django.middleware.csrf.CsrfViewMiddleware'
в качестве промежуточного программного обеспечения, то проверка токена CSRF происходит автоматически.
Что вам нужно сделать, это определить шаблонный тег {% csrf_token %}
[Django-doc] в вашем шаблоне, например:
<form method="post" action="...">
<b>{% csrf_token %}</b>
<!-- ... -->
</form>
В представлении нет необходимости создавать или проверять токен CSRF.
По вашему мнению, выследует проверить request.method == 'POST'
вместо if request.POST
, так как запрос POST может быть сделан без данных.
Согласно PEP-8 также желательно написатьфункции в нижнем регистре с подчеркиванием.
Наконец, если вы сделаете redirect(..)
, лучше использовать имя представления.Если позже вы измените путь к этому представлению, изменится и URL-адрес, на который вы перенаправляете.
def <b>login</b>(request):
args = {}
if <b>request.method == 'POST'</b>:
username = request.POST.get('username', '')
password = request.POST.get('password', '')
user = authenticate(username=username, password=password)
print(user, username, password)
if user is not None:
auth.login(request, user)
return redirect('<i>name-of-view</i>')
else:
args['login_error'] = "Пользователь не найден"
return render(request, 'HiPage/Login.html', args)
else:
return render(request, 'HiPage/Login.html', args)