当用户登录时,我需要在会话上设置一个变量。我该怎么做?
if request.user.is_authenticated():
profile = request.user.get_profile()
request.session['idempresa'] = profile.idempresa
我的另一个问题是在一个表格中:
class PedidoItensForm(ModelForm):
class Meta:
model = ItensPedido
def __init__(self, *args, **kwargs):
profile = kwargs.pop('vUserProfile', None)
super(PedidoItensForm, self).__init__(*args, **kwargs)
如何获取会话的“idempresa”值,以在我的查询集中使用?
用于设置会话变量:
request.session['idempresa'] = profile.idempresa
获取会话数据:
if 'idempresa' in request.session:
idempresa = request.session['idempresa']
用于设置会话变量:
request.session['fav_color'] = 'blue'
用于获取会话数据
fav_color = request.session.get('fav_color', 'red')
参考:https://docs.djangoproject.com/en/dev/topics/http/sessions/
您可以在 Djanog 视图中使用
request.session['key']
设置和获取会话,并使用 request.session.get('key') 获取会话,如下所示。 *如果键不存在,request.session.get()
默认返回None
,您可以将None
更改为其他值,如Doesn't exist
,将其设置为第二个参数,如下所示,您可以看到保存会话时,您可以看到我的问题和我的答案解释会议的时间和地点已保存:
# "views.py"
from django.shortcuts import render
def test(request):
request.session['person'] = {'name':'John','age':27}
print(request.session['person']) # {'name':'John','age':27}
print(request.session['person']['name']) # John
print(request.session['person']['age']) # 27
print(request.session.get('person')) # {'name':'John','age':27}
print(request.session.get('person')['name']) # John
print(request.session.get('person')['age']) # 27
print(request.session.get('animal')) # None
print(request.session.get('animal', "Doesn't exist")) # Doesn't exist
return render(request, 'index.html', {})
并且,您可以在 Django 模板中使用
request.session.key
获取会话,如下所示:
# "templates/index.html"
{{ request.session.person }} {# {'name':'John','age':27} #}
{{ request.session.person.name }} {# John #}
{{ request.session.person.age }} {# 27 #}
并且,您可以使用以下代码删除会话。 *request.session.pop('key') 可以获取,然后删除session,如果key不存在并且第二个参数没有设置,并且如果key不存在并且设置了第二个参数,则会出现错误,返回第二个参数,request.session.clear()和request.session.flush()可以删除当前所有的session,可以看到我的问题和答案解释
request.session.clear()
和request.session.flush()
之间的区别:
# "views.py"
from django.shortcuts import render
def test(request):
del request.session['person']
del request.session['person']['name']
del request.session['person']['age']
print(request.session.pop('person')) # {'name':'John','age':27}
print(request.session.pop('animal') # Error
print(request.session.pop('animal', "Doesn't exist")) # Doesn't exist
request.session.clear()
request.session.flush()
return render(request, 'index.html', {})
例如,我们显示用户访问某个页面的次数以及上次登录的时间。显示在主页视图上;
def home(request):
if 'session_count' in request.session:
request.session['session_count'] += 1
else:
request.session['session_count'] = 1
session_count = request.session['session_count']
last_login = request.COOKIES.get('last_login')
response = render(request, 'finals/home.html',{
"session_count": session_count,
'last_login': last_login,
})
response.set_cookie('last_login', datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
return response
将显示上下文的主页 HTML 页面;
<p>You have refreshed this page {{ session_count }} times during this session.</p>
<p>You last logged in on: <b>{{ last_login }}</b></p>
希望这有帮助:)