Django中的request.method和request.GET

时间:2019-12-06 14:15:39

标签: django django-models django-forms django-templates django-views

我正在学习一个教程,但无法理解其中的几行内容:

from django.shortcuts import render, get_object_or_404
from django.http import HttpResponseRedirect

from . models import Page
from .forms import ContactForm

def index(request, pagename):
    pagename = '/' + pagename
    pg = get_object_or_404(Page, permalink=pagename)
    context = {
        'title': pg.title,
        'content': pg.bodytext,
        'last_updated': pg.update_date,
        'page_list': Page.objects.all(),
    }
    # assert False
    return render(request, 'pages/page.htm', context)


def contact(request):
    submitted = False
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            #assert False 
            return HttpResponseRedirect('/contact?submitted=True')
    else:
        form = ContactForm()
        if 'submitted' in request.GET:
            submitted = True

    return render(request,'pages/contact.htm',{'form': form, 'page_list': Page.objects.all(), 'sbmitted': submitted})

以上是pages/view.py文件

{% extends "pages/page.htm" %}

{% block title %} Contact us {% endblock title %}

{% block content %}

<h1>Contact us</h1>

{% if submitted %}

<p class="success">
    Your message was submitted successfully. Thankm you.
</p>

{% else %}

<form action="" method="post" novalidate>

    <table>
        {{ form.as_table }}
        <tr>
            <td>&NonBreakingSpace;</td>
            <td><input type="submit" value="Submit"></td>
        </tr>
    </table>
    {% csrf_token %}
</form>

{% endif %}

{% endblock content %}

以上是pages/contact.htm文件

那么

是什么意思
if requested.method == 'POST':

为什么要进行以下检查?

if submitted in request.GET:
    submitted=True

2 个答案:

答案 0 :(得分:0)

  1. 您可以通过GET或POST发送数据。使用GET,您可以通过URL发送数据。例如

www.mydomain.com/Form?Key1=xxxxx&Key2=yyyyyyy

通过POST,数据被“隐藏”发送。例如,在登录表单中,您不希望密码在URL中可见。这就是为什么将这些形式用作发送POST的方法。

if request.method == 'POST':验证发送的数据是否为POST格式

2。

else:
    form = ContactForm()
    if 'submitted' in request.GET:
        submitted = True

这意味着,如果发送方法不是POST而是GET,请查看发送的信息中是否有submitted参数,如果是,请将其值设置为True。

答案 1 :(得分:0)

  • request.method给出了提交表单的方法,因此第一个 会检查表单是否使用post方法提交
  • request.GET返回GET方法传递的所有变量的上下文(类似于python中的字典)
  • 应该有

    如果request.GET.get('submitted')==“真”:

    submitted = True
    

代替

if submitted in request.GET:
    submitted=True
  • request.GET.get('submitted')给出通过url传递的已提交值
  • 需要注意的是,以上代码中提交的内容是不同的,前者是context中的键(类似于dictionary),而后者是views.py中的变量