如何在Django中设置和获取Session?

问题描述 投票:0回答:4

当用户登录时,我需要在会话上设置一个变量。我该怎么做?

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”值,以在我的查询集中使用?

python python-3.x django django-forms django-sessions
4个回答
103
投票

用于设置会话变量:

request.session['idempresa'] = profile.idempresa

获取会话数据:

if 'idempresa' in request.session:
    idempresa = request.session['idempresa']

66
投票

用于设置会话变量:

request.session['fav_color'] = 'blue'

用于获取会话数据

fav_color = request.session.get('fav_color', 'red')

参考:https://docs.djangoproject.com/en/dev/topics/http/sessions/


2
投票

您可以在 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', {})

0
投票

例如,我们显示用户访问某个页面的次数以及上次登录的时间。显示在主页视图上;

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>

希望这有帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.