将变量客户端(JS Ajax)发送到服务器端(Python Django)
Posted
技术标签:
【中文标题】将变量客户端(JS Ajax)发送到服务器端(Python Django)【英文标题】:Sending variable Client Side (JS Ajax) to Server Side (Python Django) 【发布时间】:2020-06-09 14:34:21 【问题描述】:我正在使用 Python 3.7.4 和 Django 3.0.3,并且我在前端应用程序中运行了一个 javascript 中的脚本 Ajax。当用户单击链接时,必须将变量发送到后端 python。看例子
Javascript
$('.likebutton').click(function()
var catid;
catid = $(this).attr("data-catid");
$.ajax(
type: "GET",
// url: "/likePost",
url: "/likePost/" + catid,
/* data:
post_id: catid
,
*/
success: function(data)
$('#like' + catid).remove();
$('#message').text(data);
)
);
urls.py
在我的应用程序的 urlpattner 中
urlpatterns = [
path('', views.index, name='index'), # index view at /
path('likePost/', views.likePost, name='likepost'), # likepost view at /likepost
]
views.py
def likePost(request):
if request.method == 'GET':
post_id = request.GET['post_id']
likedpost = Post.obejcts.get(pk=post_id) #getting the liked posts
m = Like(post=likedpost) # Creating Like Object
m.save() # saving it to store in database
return HttpResponse("Success!") # Sending an success response
else:
return HttpResponse("Request method is not a GET")
在调试中我收到以下消息错误
Not Found: /likePost
[25/Feb/2020 16:12:17] "GET /likePost?post_id=1 HTTP/1.1" 404 2335
我做错了什么?
【问题讨论】:
您混淆了我提供的两种解决方案。您现在将post_id
作为 path 参数 传递,但希望它作为 querystring 变量出现在您的视图中。请仔细阅读,如果仍然没有意义,请告诉我,我会尽力详细说明。
感谢@ReinstateMonica 帮助我,但错误仍然存在。我尝试了您给我的 2 个选项。但没有成功
好的,现在是。我使用 post_id 作为查询字符串。谢谢
【参考方案1】:
在您的 ajax 脚本中,您传递了一个名为 post_id
的 querystring 参数(例如 likePost/?post_id=1
),但在您的 urlpatterns 中,您指定了 post_id
作为路径参数(例如likePost/1/
)。
你有两个选择:
post_id 作为路径参数
将 post_id
添加到 url,而不是将其作为数据发送:
$('.likebutton').click(function()
var catid;
catid = $(this).attr("data-catid");
$.ajax(
type: "GET",
// standard syntax
url: "/likePost/" + catid,
// template string syntax
// url: `/likePost/$catid`,
success: function(data)
$('#like' + catid).remove();
$('#message').text(data);
)
);
然后将 post_id
添加到您的视图中:
def likePost(request, post_id):
...
post_id 作为 查询字符串
将路径更改为以下内容:
path('likePost/', views.likePost, name='likepost')
然后您可以在您的视图中通过request.GET
访问post_id
:
def likePost(request):
post_id = request.GET['post_id']
...
此外,如果您不确定要使用哪个选项,我建议您阅读When do I use path parameters vs. query params in a RESTful API?。
【讨论】:
我按照您的建议更改了我的 Ajax。现在我收到以下错误:未找到:/likepost/$catid [25/Feb/2020 16:47:58] "GET /likepost/$%7Bcatid%7D?post_id=1 HTTP/1.1" 404 2346 @RafaelChristófano 看起来您使用了双引号,例如。"/likePost/$catid"
而不是反引号
@RafaelChristófano 我已经修改了我的答案,因此不使用 template string 语法。查看更新
另外,如果您不确定我在说什么,请参阅this question
尚未找到:/likePost/1 [25/Feb/2020 16:58:45] "GET /likePost/1 HTTP/1.1" 404 2311以上是关于将变量客户端(JS Ajax)发送到服务器端(Python Django)的主要内容,如果未能解决你的问题,请参考以下文章
如何以 GET 方法将数据从客户端发送到服务器端 - ajax