如何在django中获取用户的IP?
我有这样的观点:
# Create your views
from django.contrib.gis.utils import GeoIP
from django.template import RequestContext
from django.shortcuts import render_to_response
def home(request):
g = GeoIP()
client_ip = request.META['REMOTE_ADDR']
lat,long = g.lat_lon(client_ip)
return render_to_response('home_page_tmp.html',locals())
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
KeyError at /mypage/
'REMOTE_ADDR'
Request Method: GET
Request URL: http://mywebsite.com/mypage/
Django Version: 1.2.4
Exception Type: KeyError
Exception Value:
'REMOTE_ADDR'
Exception Location: /mysite/homepage/views.py in home, line 9
Python Executable: /usr/bin/python
Python Version: 2.6.6
Python Path: ['/mysite', '/usr/local/lib/python2.6/dist-packages/flup-1.0.2-py2.6.egg', '/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk', '/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', '/usr/local/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages', '/usr/lib/pymodules/python2.6']
Server time: Sun, 2 …Run Code Online (Sandbox Code Playgroud) 我正在尝试为网站开发登录页面.我正在使用Django 1.4.2.我使用了正确登录cookie的用户set_cookie.但我没有clear_cookie在Django的文档中找到.如何清除cookie以使用户注销?
我想在视图中设置一个cookie,然后让该视图呈现一个模板.据我了解,这是设置cookie的方法:
def index(request):
response = HttpResponse('blah')
response.set_cookie('id', 1)
return response
Run Code Online (Sandbox Code Playgroud)
但是,我想设置一个cookie,然后渲染一个模板,如下所示:
def index(request, template):
response_obj = HttpResponse('blah')
response_obj.set_cookie('id', 1)
return render_to_response(template, response_obj) # <= Doesn't work
Run Code Online (Sandbox Code Playgroud)
模板将包含链接,单击这些链接将执行其他视图,以检查我正在设置的cookie.我在上面第二个例子中展示的是什么?我知道我可以创建一个包含我的模板的所有HTML的字符串,并将该字符串作为参数传递给HttpResponse,但这看起来真的很难看.有没有更好的方法来做到这一点?谢谢.
对于我的网站,几乎每个页面都有一个标题栏显示"欢迎,ABC",其中"ABC"是用户名.这意味着request.user将为每一个请求调用,导致数据库一次又一次地命中.
但是一旦用户登录,我应该能够将他的user实例存储在他的cookie中并加密它.这样我可以避免重复访问数据库,而只是request.user从cookie中检索.
你会如何修改Django来做到这一点?是否有任何Django插件可以满足我的需求?
谢谢
我正在尝试这里的答案中的方法。像这样的东西:
url = 'https://InternalURL'
token = 'api token here'
response = redirect(url)
response['Token'] = token
return response
Run Code Online (Sandbox Code Playgroud)
此代码位于单击模板中的链接时调用的视图中。执行一些操作来构建正确的 url 并在此代码之前获取 api 令牌。
如果我通过 Fiddler 检查请求,第一个具有 302 状态代码的重定向包含我设置的标头。但是随后尝试导航到我想要重定向到的实际 url 的请求,我需要的标头没有设置。
显然,这会导致请求失败,因为标头中不存在身份验证令牌。
我完全错过了一些明显的东西吗?有一个更好的方法吗?预先感谢您的任何帮助!