[英]CSRF Verification Failed - Django
好的,所以我一直在瀏覽Rango,Django教程:
( http://www.tangowithdjango.com/book17/chapters/bing_search.html )
我實現的大致相同,但改變它以向Guardian Open-Platform API發出請求。 我認為大部分都是正確的但每次我嘗試搜索時都會CSRF token missing or incorrect
錯誤。 我有一個很好的搜索並嘗試了很多不同的解決方案,但似乎沒有任何工作!
我在下面列出了搜索頁面html,views和guardian_search模型。
search.html:
{% extends 'rango/base.html' %}
{% load staticfiles %}
{% block title %}Search{% endblock %}
{% block body_block %}
<div class="page-header">
<h1>Search with Rango"</h1>
</div>
<div class="row">
<div class="panel panel_primary">
</br>
<form class="form-inline" id="user_form" method="post" action="{ url 'search' %}">
{% csrf_token %}
<!-- Display the search form elements here -->
<input class="form-control" type="text" size="50" name="query" value="" id="query" />
<input class="btn btn-primary" type="submit" name="submit" value="Search" />
<br />
</form>
<div class="panel">
{% if result_list %}
<div class="panel_heading">
<h3 class="panel-title">Results</h3>
<!-- Display search results in an ordered list -->
<div class="panel-body">
<div class="list-group">
{% for result in result_list %}
<div class="list-group-item">
<h4 class="list-group-item-heading"><a href="{{ result.url }}">{{ result.title }}</a></h4>
<p class="list-group-item-text">A summary here?</p>
</div>
{% endfor %}
</div>
</div>
{% endif %}
</div>
</div>
</div>
</div>
{% endblock %}
views.py:
from django.template import RequestContext
from django.shortcuts import render_to_response
from rango.bing_search import get_content
def search(request):
result_list = []
if request.method == 'POST':
query = request.POST['query'].strip()
if query:
result_list = get_content(query)
return render_to_response('rango/search.html', {'result_list':result_list})
guardian_search.py:
import requests
import pprint as pp
def get_content():
api_url = 'http://content.guardianapis.com/search?'
payload = {
'q': raw_input(''),
'api-key': 'api_key',
'page-size': 10,
'show-editors-picks': 'true',
'show-elements': 'None', #'audio', 'image', 'video', 'all'
'show-fields': 'None', #'headline' , 'body'
'field': 'None',
}
response = requests.get(api_url, params=payload)
data = response.json()
urlList = []
for item in data['response']['results']:
urlList.append({
'url': item['webUrl'],
'title': item['webTitle']})
pp.pprint(urlList)
return urlList
if __name__ == '__main__':
get_content()
如果還有其他任何有用的東西,請告訴我,我會添加它。
提前致謝!!
如果使用render_to_response
,則必須提供RequestContext
以使CSRF令牌有效。
return render_to_response('rango/search.html',
{'result_list':result_list},
context_instance=RequestContext(request))
但是,Django 1.7版教程使用的更簡單的解決方案是使用render
快捷方式而不是render_to_response
。
from django.shortcuts import render
render(request, 'rango/search.html', {'result_list':result_list})
順便說一句,你在action="{ url 'search' %}">
缺少%
action="{ url 'search' %}">
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.