今天早上我的收件箱里有大约100封电子邮件告诉我各种页面不存在(我怀疑某些机器人正在寻找安全漏洞)。错误是:
NoReverseMatch: Reverse for 'view_profile' with arguments '('',)' and keyword arguments '{}' not found.
但是当我转到我的生产服务器上的指定URL时,我会得到我的404页面,就像我期望的那样,并且没有发送电子邮件。那么为什么/这些机器人如何生成(我认为是什么)内部服务器错误?我该如何预防呢?
我的view_profile
urlpattern定义如下:
url(r'^(?P<id>\d+)$', name="view_profile")
的子模式
RegexURLResolver(r'^contacts/', 'profiles.views.user_profile'),
它的定义与我的其他任何URL模式完全相同,并且它需要传递给它的ID ....所以我不知道它是如何被没有参数击中的。
完整的痕迹:
Traceback (most recent call last):
File "/home/me/my/website/lib/python2.7/django/core/handlers/base.py", line 150, in get_response
response = callback(request, **param_dict)
File "/home/me/my/website/lib/python2.7/django/utils/decorators.py", line 93, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "/home/me/my/website/lib/python2.7/django/views/defaults.py", line 19, in page_not_found
return http.HttpResponseNotFound(t.render(RequestContext(request, {'request_path': request.path})))
File "/home/me/my/website/lib/python2.7/django/template/base.py", line 123, in render
return self._render(context)
File "/home/me/my/website/lib/python2.7/django/template/base.py", line 117, in _render
return self.nodelist.render(context)
File "/home/me/my/website/lib/python2.7/django/template/base.py", line 744, in render
bits.append(self.render_node(node, context))
File "/home/me/my/website/lib/python2.7/django/template/base.py", line 757, in render_node
return node.render(context)
File "/home/me/my/website/lib/python2.7/django/template/loader_tags.py", line 127, in render
return compiled_parent._render(context)
File "/home/me/my/website/lib/python2.7/django/template/base.py", line 117, in _render
return self.nodelist.render(context)
File "/home/me/my/website/lib/python2.7/django/template/base.py", line 744, in render
bits.append(self.render_node(node, context))
File "/home/me/my/website/lib/python2.7/django/template/base.py", line 757, in render_node
return node.render(context)
File "/home/me/my/website/lib/python2.7/django/template/defaulttags.py", line 311, in render
return self.nodelist_true.render(context)
File "/home/me/my/website/lib/python2.7/django/template/base.py", line 744, in render
bits.append(self.render_node(node, context))
File "/home/me/my/website/lib/python2.7/django/template/base.py", line 757, in render_node
return node.render(context)
File "/home/me/my/website/lib/python2.7/django/template/defaulttags.py", line 450, in render
raise e
NoReverseMatch: Reverse for 'view_profile' with arguments '('',)' and keyword arguments '{}' not found.
<WSGIRequest
GET:<QueryDict: {}>,
POST:<QueryDict: {}>,
COOKIES:{'csrftoken': '89867bc39db49a791bb24dce06e26b6f',
'sessionid': 'd0db456ae01005678d1538b00ae26dd1'},
META:{'CSRF_COOKIE': '89867bc39db49a791bb24dce06e26b6f',
'DOCUMENT_ROOT': '/usr/local/apache2/htdocs',
'GATEWAY_INTERFACE': 'CGI/1.1',
'HTTP_ACCEPT': '*/*',
'HTTP_CONNECTION': 'close',
'HTTP_COOKIE': 'csrftoken=89867bc39db49a791bb24dce06e26b6f; sessionid=d0db456ae01005678d1538b00ae26dd1',
'HTTP_HOST': 'myproject.net',
'HTTP_USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; GTB6; Zango 10.3.75.0)',
'HTTP_X_FORWARDED_FOR': '39.47.147.220',
'HTTP_X_FORWARDED_HOST': 'myproject.net',
'HTTP_X_FORWARDED_SERVER': 'myproject.net',
'PATH_INFO': u'/web/',
'PATH_TRANSLATED': '/home/me/my/website/myproject.wsgi/web/',
'QUERY_STRING': '',
'REMOTE_ADDR': '127.0.0.1',
'REMOTE_PORT': '40577',
'REQUEST_METHOD': 'GET',
'REQUEST_URI': '/web/',
'SCRIPT_FILENAME': '/home/me/my/website/myproject.wsgi',
'SCRIPT_NAME': u'',
'SERVER_ADDR': '127.0.0.1',
'SERVER_ADMIN': '[no address given]',
'SERVER_NAME': 'myproject.net',
'SERVER_PORT': '80',
'SERVER_PROTOCOL': 'HTTP/1.0',
'SERVER_SIGNATURE': '',
'SERVER_SOFTWARE': 'Apache/2.2.17 (Unix) mod_wsgi/3.3 Python/2.7.1',
'mod_wsgi.application_group': 'my.server.com|',
'mod_wsgi.callable_object': 'application',
'mod_wsgi.handler_script': '',
'mod_wsgi.input_chunked': '0',
'mod_wsgi.listener_host': '',
'mod_wsgi.listener_port': '54084',
'mod_wsgi.process_group': '',
'mod_wsgi.request_handler': 'wsgi-script',
'mod_wsgi.script_reloading': '1',
'mod_wsgi.version': (3, 3),
'wsgi.errors': <mod_wsgi.Log object at 0xae05ef8>,
'wsgi.file_wrapper': <built-in method file_wrapper of mod_wsgi.Adapter object at 0xb18c1d0>,
'wsgi.input': <mod_wsgi.Input object at 0xae05e58>,
'wsgi.multiprocess': False,
'wsgi.multithread': True,
'wsgi.run_once': False,
'wsgi.url_scheme': 'http',
'wsgi.version': (1, 1)}>
重新命名路径以保护无辜者。
答案 0 :(得分:1)
某处(可能在模板中),您使用空字符串而不是id来解析view_profile。所以找出它为什么会发生并修复它
答案 1 :(得分:1)
可能是机器人只是请求所有可映射的URL(作为网站爬虫),而不是尊重重定向请求或cookie。
答案 2 :(得分:0)
你可能想要一个robots.txt文件来抵御僵尸程序。将其添加到主urls.py文件中。对于开发环境,应在settings.py中将DISALLOW_ROBOTS设置为True。
if settings.DISALLOW_ROBOTS:
urlpatterns += patterns('',
(r'^robots\.txt$', lambda r: HttpResponse("User-agent: *\nDisallow: /", mimetype="text/plain")),
)
else:
urlpatterns += patterns('',
(r'^robots\.txt$', lambda r: HttpResponse("User-agent: *\nDisallow: ", mimetype="text/plain")),
)