Django=を使用して単純なWebサイトを構築しています。ベースアドレス(現時点では127.0.0.1:8000/
)、Djangoを使用して、ユーザー権限に基づいていくつかのチェックとリダイレクトを行うビューを表示します。管理者権限がある場合は、/admin
、もしあなたが/home
、ログインしていない場合は/login
。)
そのHTTPリクエストを行うと、リダイレクトされます必要に応じてですが、Django=ログに次の2つのエラーも表示されます。
('\x16\x03\x01\x00\x95\x01\x00\x00\x91\x03\x01N\xaa\x9c\x08\x96\x7f\x92\xe9Z\x925\xcaY4\xa6\xa5\xab\xf2\x16\xfaT\x89\xe7\x8a\xc3\x99J)6\xfb\xc44\x00\x00H\xc0')
"??N????Z?5?Y4?????T??ÙJ)6??4H?" 400 -
最初のヘックスを翻訳しました(読みやすいようにスペースを追加しました):SYN ETX NUL NUL U SOH NUL NUL Q ETX NUL N 170 156 X r 246 STX 141 214 ? 143 EOT FS j 142 223 s 241 220 < 185 \ \ m 242 &
サーバーがリクエストとしてそれを好まない理由は確かにわかりますが、どこから来たのかわかりません。
何か案は?
どうもありがとう。
===============
ビューのコードは次のとおりです。
def index(request):
user = request.user
admin_courses = []
if (user.is_authenticated()):
u_id = user.getUserId()
my_enrollment = Enrollment.objects.filter(user_id=u_id)
admin_enrollment = my_enrollment.filter(type="ADMIN")
for enr in admin_enrollment:
course = Course.objects.get(id=enr.getCourseId())
admin_courses.append(course)
if (len(admin_courses)>0):
return HttpResponseRedirect('/admin')
else:
return HttpResponseRedirect('/home')
return HttpResponseRedirect('/login')
実際の質問に対処するために、https経由でDjangoサーバーにアクセスしようとすると、これが発生します。httpに戻ると、そのエラーは表示されなくなります。
実行するとこの種のエラーが発生します:
manage.py runserver ...
の代わりに:
manage.py runfcgi ...
nginxの背後にいるからです。
Runserverを使用する場合、標準のhttp Web要求をリッスンしています。 runfcgiを使用すると、プレーンHTTPの代わりにfastcgiプロトコルを使用して、異なるタイプの要求をリッスンします。
結果を達成するためにこのメンテナンスミドルウェアをリファクタリングできます。コンテンツ要求を処理する前にユーザーステータスをチェックするためです。
import settings
from Django.http import HttpResponseRedirect
class MaintenanceModeMiddleware(object):
"""
Maintenance mode for Django
If an anonymous user requests a page, he/she is redirected to the
maintenance page.
"""
def process_request(self, request):
is_login = request.path in (
settings.LOGIN_REDIRECT_URL,
settings.LOGIN_URL,
settings.LOGOUT_URL,
settings.MAINTENANCE_PATH,
)
if (not is_login) and settings.MAINTENANCE and (not request.user.is_authenticated()):
return HttpResponseRedirect(settings.MAINTENANCE_PATH)
return None