, 나는 이런 내 자신의 미들웨어를 쓰기로 결정 몇 SO 답변을 다음과 후 :장고 미들웨어 문제
import django.conf.global_settings as DEFAULT_SETTINGS
...
MIDDLEWARE_CLASSES = DEFAULT_SETTINGS.MIDDLEWARE_CLASSES + (
'base.mymiddleware.LoginFormMiddleware',
)
TEMPLATE_CONTEXT_PROCESSORS = DEFAULT_SETTINGS.TEMPLATE_CONTEXT_PROCESSORS + (
'django.core.context_processors.request',
)
형태는, 모든 곳에서 accesed 할 base.html에서, 다음과 같습니다
{% if user.is_authenticated %}
<div class="login_box">
<form action="/myapp/logout/" method="post">{% csrf_token %}
<div class="col2"><a>{{ user.username }}</a></div>
<div class="col3"><input type="submit" value="Logout" name="logout_submit"/></div>
</form>
</div>
{% else %}
<form action="." method="post">
{% csrf_token %}
<div class="login_box">
<div class="error_box">
{% if request.login_form.errors %}
Incorrect User/Password
{% endif %}
</div>
<div class="col00"> <h4>{{ request.login_form.username.label_tag }}</h3></div>
<div class="col11">{{ request.login_form.username }}</div>
<div class="col22"><h4>{{ request.login_form.password.label_tag }}</h3></div>
<div class="col33">{{ request.login_form.password }}</div>
<div class="col44"><input type="submit" value="Login" name="login_submit"/></div>
<input type="hidden" name="next" value="{{ request.get_full_path }}" />
</div>
</form>
{% endif %}
로그인 normall 작동 y를하지만, 그것을하고 나면 GET 요청을 할 때마다 user.is_authenticated가 false를 반환하는 것처럼 보입니다. 로그 아웃 폼 대신 빈 로그인 폼이 표시됩니다.
문제가 내 미들웨어에있는 경우 (request.method! = 'POST'가 양식 = LoginForm (request)를 반환하는 경우) 또는 내 설정에서 누락 된 항목이거나이 경우 미들웨어를 사용하는 것일 수 있습니다. 좋은 생각이 아니 었습니다. ...
관련된 뷰를 추가하십시오. 나는 개인적으로이 상황에서 미들웨어를 사용하는 목적을 이해하지 못했다. 장고는 로그인과 체크 아웃을위한 알맞은 모듈을 제공한다. –
내 견해는 미안하지만 모든 작업이 미들웨어에 있다는 사실을 알지 못합니다. 실제로 그 안에 장고 로그인을 사용하고 있습니다. 로그인 및 로그 아웃보기에는 다음 행이 있습니다. return HttpResponseRedirect (request.META.get ('HTTP_REFERER')). 미들웨어를 사용하는 것은 내가 HTML이 아닌, 내 사이트에서이 양식을 원하기 때문이다. – juankysmith
Django의 인증 미들웨어는 템플릿 상속을 사용하고 있다면'dict'에'user '객체를 템플릿에 추가한다. (해야한다) _, 당신은 모든 페이지에로드됩니다 이런 식으로 base.html에 양식을 넣을 수 –