1. 用getJSON动态加载数据:
$getJSON("{%url '{watch_information}'%}",{'data':data,},function(ret){
//do something
})
第一个参数为处理请求的链接,第二个参数为连同请求发送到后端的数据,第三个参数是返回后调用的函数,在函数体内可以对返回数据 ret
进行各种操作。
后端视图函数:
from django.http import JsonResponse
def watch_information(request):
data=request.GET.get('data')
#dosomething
return JsonResponse(data)
如果直接返回QuerySet,则需要将其序列化:
data = serializer.serialize("json", somemodel.objects.all())
return JsonResponse(data)
然后再在前端反序列化:
$getJSON("{%url '{watch_information}'%}",{'data':data,},function(ret){
$each(JSON.parse(ret),function(i,item){
//JSON.parse将json字符串转化成JavaScript对象
// i是索引,item是列表中的每个元素
//dosomething
})
})
2. 用表单提交数据到后台。以登录表单为例:
<form class="form-signin my-md-4" action="/home/" method="POST">
{% csrf_token %}
<h2 class="h2 mb-4 font-weight-normal">Please sign in</h2>
{% if message %}
<div class="alert alert-warning">{{ message }}</div>
{% endif %}
<div class="form-group">
<label for="inputUsername" class="sr-only">User name</label>
<input name='username' type="text" id="inputUsername" class="form-control" placeholder="User name" required autofocus>
</div>
<br/>
<div class="form-group">
<label for="inputPassword" class="sr-only">Password</label>
<input name='password' type="password" id="inputPassword" class="form-control" placeholder="Password" required>
</div>
<button class="btn btn-lg btn-secondary btn-block" type="submit">Log in </button>
</form>
django提供了一种机制防止跨站点请求伪造(CSRF),当访问页面时,会随机生成一个token,存放在cookie中,并保存到session;当提交表单时会附带一个token,
后端比对这个token与session中是否一致。因此在每个表单开始处都要加上{%csrf_token%} 自动生成token。。如果要强行取消csrf机制,则在视图函数前加上 @csrf_exempt.
后端代码:
def home(request):
if request.session.get('is_login',None): #判断用户是否已登录
return redirect('../recent')
if request.method=='POST':
username=request.POST.get('username') #按“name”属性获取表单数据
password=request.POST.get('password')
try:
user=models.User.objects.get(username=username)
if user.password==password: #保存用户信息
request.session['is_login'] = True
request.session['user_id'] = user.id
request.session['user_name'] = user.username
return redirect('../recent')
else:
message='密码错误'
return render(request,'hello/home.html',{"message":message})
except:
message='用户不存在 注册新用户?'
return render(request,'hello/home.html',{"message":message})
return render(request,"hello/home.html")