为了避免用户使用网址,我已将此行添加到myproject的url.py
(r'(.+\.*)$',RedirectView.as_view(url='/')),
无论用户在浏览器网址中尝试什么,它都会将用户带到主页。好!
每当我尝试从我的网站下载任何东西时,问题就开始了。有没有办法,我可以添加文件类型的例外,例如jpg,gif,让其余的http流量转到主页/ root
我更新了views.py
def my_view(request):
my_object = get_object_or_404(Document, pk=1)
def list(request):
# Handle file upload
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
newdoc = Document(docfile = request.FILES['docfile'])
newdoc.save()
docfile = request.FILES['docfile']
return HttpResponseRedirect(reverse('myproject.myapp.views.list'))
else:
form = DocumentForm() # A empty, unbound form
documents = Document.objects.all()
return render_to_response(
'myapp/list.html',
{'documents': documents, 'form': form},
context_instance=RequestContext(request)
)
现在提供服务器错误505
答案 0 :(得分:0)
错误1:您屏蔽了有用的错误页面。
坏2:Django不是网络服务器,因此不要使用Django提供静态内容。
如果用户请求不存在的页面,则常见的事情是返回未找到的404页面。 404页面应该告知访问者发生了什么以及下一步该做什么。
示例:https://stackoverflow.com/doesnotexcist/
Django还可以配置为发送有关损坏链接的错误(404 “找不到页面”错误)。 Django在以下情况下发送有关404错误的电子邮件: DEBUG是假的;您的MIDDLEWARE_CLASSES设置包括 django.middleware.common.BrokenLinkEmailsMiddleware。
https://docs.djangoproject.com/en/1.6/howto/error-reporting/#errors
现在,您可以在需要时修复损坏的链接,如果您让用户摆弄网址,只需将其视为功能请求即可。抓住所有重定向你都在黑暗中。
更新:如何筹集404
在views.py中,您可以尝试获取一个对象,如果它不存在,则会找到一个未找到的对象:
from django.http import Http404
def my_view(request):
try:
my_object = MyModel.objects.get(pk=1)
except MyModel.DoesNotExist:
raise Http404
但更清洁的是使用快捷功能:
from django.shortcuts import get_object_or_404
def my_view(request):
my_object = get_object_or_404(MyModel, pk=1)
还有get_list_or_404
。有关返回404,快捷方式和撰写观点的详情:https://docs.djangoproject.com/en/dev/topics/http/shortcuts/和https://docs.djangoproject.com/en/dev/topics/http/views/#django.http.Http404
当您从视图中提升Http404时,如果您在根模板目录中创建了模板,Django会加载并呈现模板404.html。所以添加一个模板模板。在/ project / templates /:
中创建一个名为404.html的文件{% extends "base.html" %}
{% block title %}HTTP 404 - Page not found{% endblock %}
{% block content %}
<h1>HTTP404</h1>
<p>Snap! Something went wrong. The page you requested could not be found!</p>
<!-- Present some navigation alternatives -->
</div>
{% endblock %}
请注意,这是人类的演示文稿。但真正重要的一点是返回数据的状态代码:
allcaps$ curl -I https://stackoverflow.com/doesnotexcist/
HTTP/1.1 404 Not Found
Cache-Control: private
Content-Length: 18290
Content-Type: text/html; charset=utf-8
X-Frame-Options: SAMEORIGIN
Date: Fri, 27 Sep 2013 08:50:43 GMT
HTTP/1.1 404 Not Found
告诉抓取机器人他们不应该为该网页编制索引。
注意:如果DEBUG为True,Django会显示有用的404错误页面,其中包含针对开发人员的回溯。但是如果DEBUG是False(生产),那么它会显示我们刚刚创建的模板。因此,请确保在settings.py DEBUG = False
中测试您刚创建的模板。
答案 1 :(得分:0)
您的正则表达式(r'.+\^jpeg|jpg|gif)',RedirectView.as_view(url='/')),
可能不匹配。
或者,指定一个能够在一揽子匹配上方的行中捕获这些案例的URL。
另一种选择是空白匹配,我认为支持通过媒体扩展。 (r'',RedirectView.as_view(url='/')),
最后,您可以依靠前端Web服务器来提供媒体内容。例如,我的媒体和静态直播在media.domain.com,并通过nginx作为虚拟服务器。
编辑:你最好的选择可能是一个合适的404处理程序,根据需要重定向 - 见https://docs.djangoproject.com/en/dev/topics/http/views/#customizing-error-views。
我仍然建议将您的媒体分成您自己的网络服务器中的虚拟服务器。