【问题标题】:Django troubles with forms and csrf tokensDjango 在表单和 csrf 令牌方面遇到麻烦
【发布时间】:2012-04-29 11:02:47
【问题描述】:

我正在尝试使用一个非常简单的电子邮件表单。表单只有一个字段(电子邮件)。

forms.py

from django import forms

class EmailForm(forms.Form):
    email = forms.EmailField()

views.py

from django.shortcuts import render_to_response
from django.core.mail import EmailMultiAlternatives
from django.template import RequestContext
from launchpage.models import EmailForm

def index(request):
    if request.method == 'POST':        
        form = EmailForm(request.POST)
        if form.is_valid():
            clean_data = form.clean_data
            # send an email
                    thank_you = "Thanks for signing up"
            return render_to_response('launch.html', {'thank_you': thank_you})
    else:
        form = EmailForm()
    return render_to_response('launch.html', {'form': form,}, context_instance=RequestContext(request))

launch.html(相关部分)

<div class="row-fluid">
    <div class="span12">
        {% if thank_you %}
             <div class="alert alter-info">
             {{ thank_you }}
             </div>
        {% else %}
            <form action="" method="post" class="form-horizontal">{% csrf_token %}
            Or stay updated by email (no spam, pinky swear) &nbsp;&nbsp;
            {{ form.email }}
            <button type="submit" class="btn">Submit</button>
        </form>
        {% endif %}
    </div>
</div>

settings.py 中的中间件

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
)

当前结果:页面显示好像没有涉及模板。我看到了表单和提交按钮,但没有电子邮件字段。也没有csrf隐藏字段。我一定是错过了什么愚蠢的东西......

【问题讨论】:

    标签: python django forms csrf django-csrf


    【解决方案1】:

    假设:

    from launchpage.models import EmailForm

    不应该是from launchpage.forms import EmailForm

    您遇到的另一个问题是{'form': form,} 必须是{'form': form}

    最后,{{ form.email }} 应该是简单的{{ form }}

    最后提示 - 考虑使用render shortcut,它会自动发送适当的请求上下文。

    【讨论】:

    • 我不知道你为什么投了反对票,不是我。我修复了你提到的内容,起初它没有用。然后我尝试重新启动 apache,它成功了!谢谢
    猜你喜欢
    • 2017-07-31
    • 2020-11-02
    • 2019-10-21
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    相关资源
    最近更新 更多