在url中获取csrfmiddleware令牌

时间:2018-02-20 06:52:53

标签: django django-csrf

我提交了这样的表单后,我在网址中获得了csrf令牌。

http://127.0.0.1:8000/detail/?csrfmiddlewaretoken=lqvoeSG32IcodLTFksWEU1NPQ9XCmHybwmzMKEuPzxDN1e73B0JORpAGOcGGxsjH&symbol=FLWS

在发出GET请求后,网址会在网址中显示csrf令牌。

/views.py

def search(request):
    if(request.method=='GET'):
        form=searchform(request.GET)
        if(form.is_valid()):
            id=request.GET['symbol']
            data=company.objects.filter(Symbol=id)
            form=searchform()
            return render(request, 'list-company.html',{"data":data,"form":form})

/urls.py

from django.contrib import admin
from django.urls import path
from csv2db.views import Company,search
urlpatterns = [
    path('admin/', admin.site.urls),
    path('company/',Company,name='company-details'),
    path('detail/',search,name='search')

]

HTML文件中的表单

{% block content %}
        <form method="get" action="{% url 'search'  %}">
            {% csrf_token %}
            {{ form.as_ul}}
            <button type="Submit">Submit</button>
        </form>

2 个答案:

答案 0 :(得分:1)

{% block content %}
        <form method="POST" action="{% url 'search'  %}">
            {% csrf_token %}
            {{ form.as_ul}}
            <button type="Submit">Submit</button>
        </form>

并更改您的观点

def search(request):
    form=searchform()
    if(request.method=='POST'):
        form=searchform(request.POST)
        if(form.is_valid()):
            id=request.GET['symbol']
            data=company.objects.filter(Symbol=id)
            form=searchform()
            return render(request, 'list-company.html',{"data":data,"form":form})
    return render(request, 'list-company.html',{"form":form})

答案 1 :(得分:1)

您正在HTML文件中添加csrf_token模板标记,并且表单方法设置为get。因此,数据作为查询参数附加,包括csrf标记。

因此,您可以将其更改为post方法或删除csrf_token模板标记。