我正在使用django来构建一个简单的网站。当您键入基地址(现在是127.0.0.1:8000/
)时,我使用django显示一个视图,该视图会根据您的用户权限进行一些检查并重定向您。 (如果您有管理员权限,则转到/admin
,否则转到/home
,如果您没有登录,请转到/login
。)
当我发出HTTP请求时,我会重新定向,因为我应该,但我也在django日志中看到以下两个错误:
('\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')
答案 0 :(得分:93)
要解决您的实际问题,如果您尝试通过https访问django服务器,则会出现这种情况。切换回http,该错误将消失。
答案 1 :(得分:4)
我跑的时候遇到这种错误:
manage.py runserver ...
而不是:
manage.py runfcgi ...
因为我落后于Nginx。
当您使用runserver时,它正在侦听标准的http Web请求。当你使用runfcgi时,它正在使用fastcgi协议而不是普通的http来监听不同类型的请求。
答案 2 :(得分:3)
你可以重构这个维护中间件来实现结果,因为它会在处理内容请求之前检查用户状态,这似乎更像是djangonostic ..
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