5,跨域请求伪造
post请求需要对后台产生副作用,所以需要跨域请求伪造的方法。,因为我们的django框架,
默认帮我们开启了这个验证,如果说验证不能通过就会报403错误。
默认开启是在settings中启用了,csrf的中间件。MIDDLEWARE = [
# csrf_token中间件
'django.middleware.csrf.CsrfViewMiddleware',
]
两种解决方案:
1.在form表单增加{% csrf_token %}
2.在视图函数上加装饰器from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
6,AJAX(Asynchronous Javascript And XML)
是指一种创建交互式网页应用的网页开发技术
不是一种新的技术,而是一种新的实施方案,包括的技术有js,xml,json,css等
使用场景:局部刷新通用的ajax请求方式
$.ajax({
type: 'POST',
dataType: 'JSON',
url: '/myblog/jsontest/',
success: function(data){
alert(data['name'])
}
})
$.POST('POST',
'JSON',
'/myblog/jsontest/',
function(data){
alert(data['name'])
}
)
$.GET(
'POST',
'JSON',
'/myblog/jsontest/',
function(data){
alert(data['name'])
}
)
返回数据的json格式
第一种数据获取及传输:1.获取到的是模型对象:user = models.Users.objects.get(pk=1)
2. 转json用:user = model_to_dict(user))
3.传输的时候用:return JsonResponse(user)
页面上解析
success: function(data){
alert(data.name)
}
第二种数据传输及获取
获取数据并做序列化
users = models.Users.objects.all()
序列化方式转json
users = serialize('json', users)
print(users)
传输的时候用return HttpResponse(users)
页面解析:
success: function(data){
alert(data[1]['fields']['name']);
alert(typeof(data))}
views.py文件内容
# AJAX
from django.http import JsonResponse
from django.forms.models import model_to_dict
@csrf_exempt
def jsontest(request):
u = models.User.um.get(id=7)
u = model_to_dict(u)
return JsonResponse(u)
前端HTML内容
<!--AJAX-->
<button id="user" onclick="">获取单个user</button>
<script src="/static/myblog/js/lib/jquery-2.1.4.js"></script>
<script>
$(function(){
$("#user").click(function(){
$.ajax({
type:"post",
dataType:"JSON",
url:"/myblog/jsontest/",
success:function(data){
alert(data['name'])
}
})
})
})
</script>
子模块urls内容
urlpatterns = [
url(r'^jsontest/$', views.jsontest)
]