Tôi đã viết một ví dụ rất nhỏ: một nút junit mà sẽ gửi một yêu cầu POST với một cặp giá trị:Làm thế nào để viết một cái nhìn Django cho một yêu cầu POST
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>jQuery UI Button - Default functionality</title>
<script src="{{STATIC_URL}}js/jquery-1.9.1.js"></script>
<script src="{{STATIC_URL}}js/jquery-ui-1.10.3.custom.js"></script>
<link rel="stylesheet" href="{{STATIC_URL}}css/jquery-ui-1.10.3.custom.css">
<script>
$(function() {
$("button")
.button()
.click(function(event) {
var postdata = {
'value1': 7,
'value2': 5
};
$.post('', postdata); // POST request to the same view I am now
window.alert("Hello world!"); // To know it is working
});
});
</script>
</head>
<body>
<button>Submit</button>
</body>
</html>
Vì vậy, quan điểm được hiển thị khi một Yêu cầu GET được gửi đến localhost: 8000/button/và khi nút được đẩy, yêu cầu POST cũng được gửi tới localhost: 8000/button /.
urls.py
from django.conf.urls import patterns, url
urlpatterns = patterns('',
url(r'^button/$', 'helloworld.views.buttonExample'),
)
views.py
def buttonExample(request):
print 'RECEIVED REQUEST: ' + request.method
if request.method == 'POST':
print 'Hello'
else: #GET
return render(request, 'buttonExample.html')
Khi yêu cầu GET được thực hiện, quan điểm được hiển thị một cách chính xác và tôi cũng có thể đọc tại Django an ủi các dòng:
RECEIVED REQUEST: GET <---- This line is because of my print
[28/May/2013 05:20:30] "GET /button/ HTTP/1.1" 200 140898
[28/May/2013 05:20:30] "GET /static/js/jquery-1.9.1.js HTTP/1.1" 304 0
[28/May/2013 05:20:30] "GET /static/js/jquery-ui-1.10.3.custom.js HTTP/1.1" 304 0
[28/May/2013 05:20:30] "GET /static/css/jquery-ui-1.10.3.custom.css HTTP/1.1" 304 0
...
Và khi nút được đẩy, tôi có thể thấy:
[28/May/2013 05:20:34] "POST /register/ HTTP/1.1" 403 142238
Nhưng "KHÔNG ĐƯỢC YÊU CẦU YÊU CẦU: BÀI ĐĂNG" không bao giờ được in. Không phải là "Xin chào". Có vẻ như urls.py không phục vụ chế độ xem khi POST đến, vì trong Firebug tôi có thể thấy trạng thái POST là 403 FORBIDDEN.
Đây có lẽ là một lỗi người mới ngớ ngẩn, nhưng tôi không biết mình đang thiếu gì. Tôi đã đọc django book chapter about advanced URLConf and Views và có vẻ như nó chỉ hoạt động bằng cách kiểm tra giá trị request.method.
THÊM mã thông báo csrf vào mẫu ur .. – Rajeev