首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用会话保存和检索表单?

使用会话保存和检索表单?
EN

Stack Overflow用户
提问于 2017-03-09 02:59:40
回答 1查看 1.4K关注 0票数 2

我有一个具有以下函数的context_processor.py文件

代码语言:javascript
复制
def include_user_create(request):

    if 'form' not in request.session:
        form = CreateUserForm()
    else:
        form = request.session['form']

    return { 'create_user_form' : form } 

我使用它来在我的base.html模板中显示我的寄存器,这样我就可以在所有页面上重用它。函数create_user处理表单提交

代码语言:javascript
复制
def create_user(request):

    form = CreateUserForm(request.POST or None, request.FILES or None)

    if request.method == 'POST':

        if form.is_valid():
            user = form.save(commit=False)            
            user.save()           
            user = authenticate(username=user.email, password=user.password)
        else:
            request.session['form'] = form #<--- save

    next = request.POST.get('next', '/')
    return HttpResponseRedirect(next)

如果表单无效,我想保存表单,以便context_processor可以重用表单,以便保存错误,以便将它们显示在模板中。

这样做会给我一个错误:

代码语言:javascript
复制
TypeError: <CreateUserForm bound=True, valid=False, fields=(email;password;confirm_password)> is not JSON serializable

有可能让这件事起作用吗?

EN

回答 1

Stack Overflow用户

发布于 2017-03-09 09:17:02

您有此错误,因为表单对象不是JSON可序列化的,而且默认的会话序列化程序是serializers.JSONSerializer

尝试将其更改为settings.py中的泡菜序列化程序。

代码语言:javascript
复制
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'

编辑:

使用此设置,您不必关心泡菜序列化,只需编写:

代码语言:javascript
复制
request.session['form'] = form
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42685867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档