csrf_token丢失以及如何获取用户输入的特定ID的详细信息

时间:2018-07-10 08:45:09

标签: django python-3.x

我正在尝试显示用户输入的特定ID的结果。我也不确定view.py文件。我需要进行哪些更改才能获得理想的结果?

view.py文件

def show(request):
    if request.method == 'POST':
        Num = allData.objects.only('emp_no')
        data = request.POST.get('emp_no')
        if data.is_valid():
            for n in Num:
                if n == data:
                    empid = data
                    emp = {'emp_no':data}
            return render(request,'system/show.html',{'emp_no':data})
        return(data.errors)    
    return HttpResponse("<h2>OOPS!! NO RECORD FOUND</h2>")    

show.html

{% extends 'system/base.html' %}
{% load staticfiles %}
{% block body_block %}

<div class="container" "jumbotron">
    <h2>Details</h2>
    <form method="POST" enctype="multipart/form-data">
        {% csrf_token %}
        <label class="lb" for="emp_no" >Employee No.</label>
        <input type="number" name="emp_no">
        <button type="submit" class="btn btn-success">SUBMIT</button>
    </form>
            {% for allData in emp_no %}

                {{ allData.GENDER_CHOICE}}
                {{ allData.first_name }}
                {{ allData.last_name }}
                {{ allData.birth_day }}
                {{ allData.hire_date }}
                {{ allData.dept_no }}
                {{ allData.dept_name }}
                {{ allData.salary }}
                {{ allData.from_date }}
                {{ allData.to_date }}
                {{ allData.titles }}

            {% endfor %}    

</div>

{% endblock %}

2 个答案:

答案 0 :(得分:0)

欢迎您!

从您所拥有的那里看来,值得一看Django forms documentation

让我大吃一惊的是,您试图在提交表单后将相同的模板用于表单和数据显示。分离它们可能更容易。

如果您确实希望保留一个模板,那么如果有数据,则不想显示该表单,反之亦然-如果没有数据,则想显示该表单。看起来像这样:

{% if emp_no %}
    {% for allData in emp_no %}

        {{ allData.GENDER_CHOICE}}
        {{ allData.first_name }}
        {{ allData.last_name }}
        {{ allData.birth_day }}
        {{ allData.hire_date }}
        {{ allData.dept_no }}
        {{ allData.dept_name }}
        {{ allData.salary }}
        {{ allData.from_date }}
        {{ allData.to_date }}
        {{ allData.titles }}

    {% endfor %}
{% else %}
    <form method="POST" enctype="multipart/form-data">
       {% csrf_token %}
       <label class="lb" for="emp_no" >Employee No.</label>
       <input type="number" name="emp_no">
       <button type="submit" class="btn btn-success">SUBMIT</button>
    </form>
{% endif %}

您的问题的标题还提到了csrf_token问题。您没有提供任何详细信息,但是我想事情变得混乱了,因为即使您不需要时也正在加载表单。

答案 1 :(得分:0)

在尝试发布解决方案之前,我会指出一些事情。

  1. 由于变量的命名方式,您的代码不那么可读。尝试以一种能反映您的代码功能的方式命名变量。
  2. 如果您尚未完成django tutorial,我建议您完成。它将帮助您掌握Django的核心概念。

据我了解,您正在尝试使用给定的员工编号来招聘一名员工。 这就是我要做的。

在views.py中,我将使用render而不是HttpResponse

def show(request):

    context = {}

    if request.method == 'POST':
        # extract the emp no from the request
        emp_no = request.POST.get('emp_no')

        # get or create the employee with this emp_no
        current_employee = Employee.objects.get_or_create(emp_no)

        context['current_employee'] = current_employee

    return render(request, 'show.html', context)

在模板中,您不需要forloop。您仅检索一名员工。

{% extends 'system/base.html' %}
{% load staticfiles %}
{% block body_block %}

<div class="container" "jumbotron">
    <h2>Details</h2>
    <form method="POST" enctype="multipart/form-data">
        {% csrf_token %}
        <label class="lb" for="emp_no" >Employee No.</label>
        <input type="number" name="emp_no">
        <button type="submit" class="btn btn-success">SUBMIT</button>
    </form>

    <div>
        {{ current_employee.GENDER_CHOICE}}
        {{ current_employee.first_name }}
        {{ current_employee.last_name }}
        {{ current_employee.birth_day }}
        {{ current_employee.hire_date }}
        {{ current_employee.dept_no }}
        {{ current_employee.dept_name }}
        {{ current_employee.salary }}
        {{ current_employee.from_date }}
        {{ current_employee.to_date }}
        {{ current_employee.titles }}
    </div>


</div>

{% endblock %}