我必须分配一个Django项目的工作。我需要知道URL,http:// .... 因为'urls.py'我们确实有'原始'信息。我如何了解完整的URL名称;用
表示HTTP +域+参数
阿米特。
答案 0 :(得分:8)
看看这个片段:
http://djangosnippets.org/snippets/1197/
我这样修改了它:
from django.contrib.sites.models import RequestSite
from django.contrib.sites.models import Site
def site_info(request):
site_info = {'protocol': request.is_secure() and 'https' or 'http'}
if Site._meta.installed:
site_info['domain'] = Site.objects.get_current().domain
site_info['name'] = Site.objects.get_current().name
else:
site_info['domain'] = RequestSite(request).domain
site_info['name'] = RequestSite(request).name
site_info['root'] = site_info['protocol'] + '://' + site_info['domain']
return {'site_info':site_info}
if / else是因为Django Site API的不同版本
此代码段实际上是一个上下文处理器,因此您必须将其粘贴到应用程序中名为context_processors.py
的文件中,然后添加到您的设置中:
TEMPLATE_CONTEXT_PROCESSORS = DEFAULT_SETTINGS.TEMPLATE_CONTEXT_PROCESSORS + (
'name-of-your-app.context_processors.site_info',
)
+
这里要注意我们要覆盖django设置的可能的默认上下文处理器,现在或将来,我们只需将这一个添加到元组中。
最后,请确保在返回回复时在视图中使用RequestContext
,而不仅仅是Context
。这解释了here in the docs
这只是一个使用问题:
def some_view(request):
# ...
return render_to_response('my_template.html',
my_data_dictionary,
context_instance=RequestContext(request))
答案 1 :(得分:1)
不同的Web服务器将以不同的方式处理HTTPS状态。
对于我的Nginx反向代理到Apache + WSGI设置,我明确设置了一个头,apache(django)可以检查连接是否安全。
此信息在URL中不可用,但在视图请求对象中可用。
django使用request.is_secure()
来确定连接是否安全。它是如何做的取决于后端
http://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.is_secure
例如,对于mod_python,它是以下代码:
def is_secure(self):
try:
return self._req.is_https()
except AttributeError:
# mod_python < 3.2.10 doesn't have req.is_https().
return self._req.subprocess_env.get('HTTPS', '').lower() in ('on', '1')
如果您使用代理,您可能会发现在HttpRequest.META中可以使用HTTP标头很有用
http://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.META
更新:如果您要记录每个安全请求,请将上述示例与中间件一起使用
class LogHttpsMiddleware(object):
def process_request(self, request):
if request.is_secure():
protocol = 'https'
else:
protocol = 'http'
print "%s://www.mydomain.com%s" % (protocol, request.path)
将LogHttpsMiddleware
添加到settings.py
MIDDLEWARE_CLASSES