Sim*_*nov 1 javascript django ajax jquery django-forms
我已经为这个问题苦苦挣扎了两天多,我在这里查看了类似的问题以及许多文档,但没有任何帮助。基本上,我正在构建一个 Django Web 应用程序(人们可以在其中将自己添加为朋友)我正在使用 Django 包 django-friendship,但我希望发生以下情况:当用户在其他人的个人资料中时,第一个可以单击“添加好友”按钮,必须发送好友请求。但我想在不重新加载页面或渲染到另一个页面的情况下实现这一点。为了发送请求而必须触发的方法在 views.py 中。可能我需要使用ajax,但以什么方式使用?例如,我的最终目标是在 facebook 中作为“添加朋友”按钮执行的按钮(无需重新加载)。
朋友简介.html
<form action="{% url 'users:fr_request' pk=friend.id %}" method="POST">
{% csrf_token %}
<input type="submit" value="Add friend"/>
Run Code Online (Sandbox Code Playgroud)
视图.py
def friendship_add(request, pk):
if request.method == 'POST':
to_user = User.objects.get(pk=pk)
from_user = request.user
try:
Friend.objects.add_friend(from_user, to_user)
except AlreadyExistsError as e:
print('Exception when adding a friend ' + e)
else:
return HttpResponse('You added a friend')
return render(request, 'users/friend_profile.html')
Run Code Online (Sandbox Code Playgroud)
网址.py
urlpatterns = [
url(r'users/(?P<pk>\d+)/send/$', views.friendship_add, name='fr_request'),
Run Code Online (Sandbox Code Playgroud)
]
在提交表单的那一刻,我将页面呈现给 users/(?P\d+)/send/,它调用视图方法并执行 Friend.objects.add_friend,但我希望这发生在不去 /send/ 页面的情况下或重新加载电流?
这可以使用 jQuery 轻松实现。如果页面中有多个表单,您可能需要为表单分配一个 id:
<form action="{% url 'users:fr_request' pk=friend.id %}" method="POST" id="friend_form">
{% csrf_token %}
<input type="submit" value="Add friend"/>
Run Code Online (Sandbox Code Playgroud)
脚本可能看起来像这样:
$(function() {
$("#friend_form").submit(function(event) {
// Stop form from submitting normally
event.preventDefault();
var friendForm = $(this);
// Send the data using post
var posting = $.post( friendForm.attr('action'), friendForm.serialize() );
// if success:
posting.done(function(data) {
// success actions, maybe change submit button to 'friend added' or whatever
});
// if failure:
posting.fail(function(data) {
// 4xx or 5xx response, alert user about failure
});
});
});
Run Code Online (Sandbox Code Playgroud)
有关更多信息和示例,请参阅jQuery.post() 文档。
| 归档时间: |
|
| 查看次数: |
5373 次 |
| 最近记录: |