- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为此抓狂。我正在 Django 1.3 中开发一个 Web 应用程序(最近从 1.2.5 升级,希望这可以解决我的错误),并且我在我的一个 View 中遇到了一个奇怪的错误。
该 View 作为来自客户端的 AJAX 请求进行调用。如果我将 View 作为 GET 请求调用,一切都很好。如果我将其称为没有数据的 POST 请求,那么一切都很好。但是,如果我将其称为 POST 并实际包含数据(无论该数据是什么),Django 将返回一个空白页面。
作为一个喜欢修补的人,我发现我可以从我的 View 中打印并在调试控制台中获取输出,所以我开始工作,并发现了这个奇怪的现象:
c = Character.objects.get(id=int(character))
这是该 View 中处理模型的第一行代码。打印表明,character 不仅是一个正常的值(它是请求传入的 ID),而且 c 实际上以正确的数据库记录结束。无论如何,如果调用该行,Django 的请求输出将为零。没什么。没有什么。
如果我在对模型进行任何操作之前提前返回,Django 会正确呈现请求的其余部分。对模型执行某些操作会导致发送响应 200,但内容似乎被省略。
这似乎只在发送 POST 数据时发生,无论是否以任何方式读取或使用该 POST 数据。我对此完全感到困惑。我将在这里发布我的代码,并希望这里有人能够了解幕后可能发生的黑魔法。
这是 View 本身,直接从 urls.py 调用:
@csrf_exempt
def ajax_update(request, character):
#determine the timestamp to send the client *before* polling
#the database
update_time = int(time.time())
#grab each update... thingy as json, and put it all together
output = {
"events": current_events(request, character, "default"),
"character": character,
"update_time": update_time,
}
return HttpResponse(json.dumps(output), mimetype = "application/json")
这是 current_events 代码,其中包含提到的行:
def current_events(request, character, type = "default", timestamp = 0):
'''
purpose: grab the last 3 days worth of events, or the last 10 events,
whichever is a larger list.
'''
#TODO: actually do something with timestamp
c = Character.objects.get(id=int(character))
#DEBUG: What on earth is going on here?
print c
#TODO: See if this can be optimized into a single query
event_links = EventLink.objects.filter(viewer=c)
events = Event.objects.filter(id__in=event_links.values('event')).order_by('timestamp')
t = loader.get_template('ajax/world-events.html')
output = []
for event in events:
revisions = Event.objects.filter(original_event=event.id).order_by('timestamp')
display_message = event.message
history = []
if len(revisions):
history.append(event) #first item in the history is the original event
history.extend(revisions)
display_message = history[-1].message
output.append({
"id": event.id,
"writer": event.writer.id,
"type": event.type,
"timestamp": int(time.mktime(event.timestamp.timetuple())),
"message": t.render(RequestContext(request, {"event_text": display_message, "event": event, "history": history}))
})
return output
最后,这是使用 jQuery 从客户端调用代码的 CoffeeScript:
auto_refresh_abort = 0
last_server_timestamp = 0
window.update_display = ->
#ajax call to grab events from the server
$.ajax
type: 'POST'
url: "/ajax/update/"+window.active_character
data:
"last_update": last_server_timestamp
dataType: "json"
success: (output) ->
auto_refresh_abort = 0
update_character_log output.events
error: (XMLHttpRequest, textStatus, errorThrown) ->
auto_refresh_abort += 1
console.log XMLHttpRequest
return null
如果您认为这会有所帮助(这已经很多了),我可以发布所需的任何其他代码示例,例如模型代码本身。我可以确认在我的测试用例中查找的角色确实存在,而且它只是一个标准的 Django ID,我不会用它做任何奇怪的事情。
提前致谢。
更新:根据要求,以下是输出应包含的内容的示例:
{'update_time': 1305984080, 'character': u'1', 'events': /*snip*/}
我已经验证代码执行是否完全完成,并且传递给 HttpResponse 的输出确实包含此数据。为了咯咯笑,我在轮询字符的行后面插入了一个返回“TASTY”,因此输出的数据应该是:
{'update_time': 1305984080, 'character': u'1', 'events': 'TASTY'}
并确认这是有效的。我可以在 HttpRequest 之前“打印输出”到调试控制台,并显示此内容。
如果我注释掉处理字符的行,我的浏览器会收到此数据作为请求的内容。另外,如果我按原样保留代码并且只是不发送 POST 数据,则浏览器会收到正确的数据。失败的具体情况是当我在从客户端发送 POST 数据后操作模型时——在这种情况下,浏览器收到完全相同的 HTTP header ,但没有内容。它收到的 header 是:
Content-Type:application/json
Date:Sat, 21 May 2011 13:29:38 GMT
Server:WSGIServer/0.1 Python/2.6
但没有提供实际内容。
最佳答案
这将是一个答案。它更像是一种方法,因此您一开始就不会遇到此问题,但如果发生问题,您也可以使用它来调试问题。
首先使用curl 或firefox REST 客户端创建请求plugin :
然后,您编写响应代码,返回硬编码的虚拟对象响应,涵盖几个案例(或所有用例)。因此,您的角色和 current_events 函数仅返回您知道正确的“虚拟”对象。
您使用 REST 客户端(或更正式的测试)验证响应是否正常工作。
您编写客户端 ajax 代码并验证它是否适用于虚拟输出。
您将虚拟对象调用重构为调用对象本身的函数(您可以很快验证它们是否以应有的方式返回对象。
您可以使用它来有效地调试您的程序,否则,您只是猜测程序的哪一部分正在工作,并且它很容易在很多地方失败。
关于jquery - 发送 POST 数据和访问模型时,Django 会生成空白页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6081573/
SQLite、Content provider 和 Shared Preference 之间的所有已知区别。 但我想知道什么时候需要根据情况使用 SQLite 或 Content Provider 或
警告:我正在使用一个我无法完全控制的后端,所以我正在努力解决 Backbone 中的一些注意事项,这些注意事项可能在其他地方更好地解决......不幸的是,我别无选择,只能在这里处理它们! 所以,我的
我一整天都在挣扎。我的预输入搜索表达式与远程 json 数据完美配合。但是当我尝试使用相同的 json 数据作为预取数据时,建议为空。点击第一个标志后,我收到预定义消息“无法找到任何内容...”,结果
我正在制作一个模拟 NHL 选秀彩票的程序,其中屏幕右侧应该有一个 JTextField,并且在左侧绘制弹跳的选秀球。我创建了一个名为 Ball 的类,它实现了 Runnable,并在我的主 Draf
这个问题已经有答案了: How can I calculate a time span in Java and format the output? (18 个回答) 已关闭 9 年前。 这是我的代码
我有一个 ASP.NET Web API 应用程序在我的本地 IIS 实例上运行。 Web 应用程序配置有 CORS。我调用的 Web API 方法类似于: [POST("/API/{foo}/{ba
我将用户输入的时间和日期作为: DatePicker dp = (DatePicker) findViewById(R.id.datePicker); TimePicker tp = (TimePic
放宽“邻居”的标准是否足够,或者是否有其他标准行动可以采取? 最佳答案 如果所有相邻解决方案都是 Tabu,则听起来您的 Tabu 列表的大小太长或您的释放策略太严格。一个好的 Tabu 列表长度是
我正在阅读来自 cppreference 的代码示例: #include #include #include #include template void print_queue(T& q)
我快疯了,我试图理解工具提示的行为,但没有成功。 1. 第一个问题是当我尝试通过插件(按钮 1)在点击事件中使用它时 -> 如果您转到 Fiddle,您会在“内容”内看到该函数' 每次点击都会调用该属
我在功能组件中有以下代码: const [ folder, setFolder ] = useState([]); const folderData = useContext(FolderContex
我在使用预签名网址和 AFNetworking 3.0 从 S3 获取图像时遇到问题。我可以使用 NSMutableURLRequest 和 NSURLSession 获取图像,但是当我使用 AFHT
我正在使用 Oracle ojdbc 12 和 Java 8 处理 Oracle UCP 管理器的问题。当 UCP 池启动失败时,我希望关闭它创建的连接。 当池初始化期间遇到 ORA-02391:超过
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve
引用这个plunker: https://plnkr.co/edit/GWsbdDWVvBYNMqyxzlLY?p=preview 我在 styles.css 文件和 src/app.ts 文件中指定
为什么我的条形这么细?我尝试将宽度设置为 1,它们变得非常厚。我不知道还能尝试什么。默认厚度为 0.8,这是应该的样子吗? import matplotlib.pyplot as plt import
当我编写时,查询按预期执行: SELECT id, day2.count - day1.count AS diff FROM day1 NATURAL JOIN day2; 但我真正想要的是右连接。当
我有以下时间数据: 0 08/01/16 13:07:46,335437 1 18/02/16 08:40:40,565575 2 14/01/16 22:2
一些背景知识 -我的 NodeJS 服务器在端口 3001 上运行,我的 React 应用程序在端口 3000 上运行。我在 React 应用程序 package.json 中设置了一个代理来代理对端
我面临着一个愚蠢的问题。我试图在我的 Angular 应用程序中延迟加载我的图像,我已经尝试过这个2: 但是他们都设置了 src attr 而不是 data-src,我在这里遗漏了什么吗?保留 d
我是一名优秀的程序员,十分优秀!