重点
1.ajax-get
获取的数据如下所示
{'status': 'success', 'message': '获取成功', 'list': [{'model': 'app01.article', 'pk': 1, 'fields': {'title': '渺小的人类111111111', 'content': '渺小的人类渺小的人类渺小的人类渺小的人类渺小的人类xxxxxxxxxxxxxxxxxxx', 'account': 5, 'pub_date': '2018-07-09T16:19:52Z', 'read_count': 0, 'tag': [3]}}]}
function getAjax(v) { //通过get请求取值,获取模态对话框上面所需的值
$.ajax({
url: "/app01/ajax/",
type: "GET",
data: {'id': v },
dataType: 'json',
success: function(data){
$('#testdic').val(data)
var dic_a = data['list'][0]['fields']
for ( var i in dic_a ){
console.log(i,dic_a[i])
$('#popup').find('[tname="' + i + '"]').val(dic_a[i]);
}
dic_a['account'] == "1" ? $('#checkbox_id').prop('checked',true):$('#checkbox_id').prop('checked',false)
}})
}
function test11(obj) { //点击编辑触发
var v = $(obj).parent().parent().find('[tname="id"]').text();
$('#popup').find('input[tname="id"]').val(v);
getAjax(v);
}
2.Ajax-post
$('#ajax_submit').click(function () { //提交上传数据
$.ajax({
url: "/app01/ajax/",
type: "POST",
data: {'id': $('#id_id').val(),'title': $('#title_id').val(),'account_id':$('#account_id').val()},
dataType:'json',
success:function (data) {
//alert(data);//成功返回
if(data['status'] == "success" ){
location.reload();
}else{
alert(data['status']+ data['message']) //一般是显示
}
}
})
})
二. 后台
Ajax接口 get+post
class Ajax(View):
def get (self,request,**kwargs):
ret={'status':'success','message':'获取成功'}
"""请求数据"""
try:
date=Article.objects.filter(id=request.GET.get("id"))
ret['list']=json.loads(serializers.serialize('json',date))
except Exception as e:
ret['message']=e
return JsonResponse(ret)
def post(self, request,**kwargs):
"""提交表单"""
ret = {'status': 'success', 'message': '获取成功'}
try:
id=request.POST.get("id")
title=request.POST.get("title")
account_id=request.POST.get("account_id")
if title and len(title) > 3:
pass
v=Article.objects.filter(id=id)
v.update(title=title,account_id=account_id)
except Exception as e:
ret['message'] = e
return JsonResponse(ret)
urls.py
url(r'^ajax/$',views.Ajax.as_view(),name="Ajax"),
三. 完整代码
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!-- Bootstrap -->
<link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div>
<h1>XXXX的傻猫</h1>
</div>
<div>
<table class="table" border="1px">
<thead>
<tr>
<th tname="title">IP地址</th>
<th tname="account">端口</th>
<th tname="operator">操作</th>
</tr>
</thead>
<tbody>
{%for obj in articles%}
<tr>
<!--隐藏一个标签放数据,提交表单使用-->
<td tname="title">{{obj.title}}<a tname="id" style="display: none">{{obj.id}}</a></td>
<td tname="account">{{ obj.account }}</td>
<td tname="operator"><a href="javacript:void(0)" οnclick="test11(this)" class="edit1"><span class="glyphicon glyphicon-edit" data-toggle="modal" data-target=".bs-example-modal-lg" aria-hidden="true"></span></a></td>
</tr>
{%endfor%}
</tbody>
</table>
</div>
<div id="popup" class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<form method="POST" style="margin: 20px 20px;">
{% csrf_token %}
<div class="form-group" style="display: none"> <!--隐藏一个标签放数据,提交表单使用-->
<label for="exampleInputEmail1">id</label>
<input id="id_id" tname="id" type="text" class="form-control" placeholder="Text input">
</div>
<div class="form-group">
<label for="exampleInputEmail1">在用状态</label>
<input id="checkbox_id" tname="account" type="checkbox" >
</div>
<div class="form-group">
<label for="exampleInputEmail1">文章名称</label>
<input id="title_id" tname="title" type="text" class="form-control" placeholder="Text input">
</div>
<div class="form-group">
<label for="exampleInputPassword1">作者</label>
<select tname="account" id="account_id" class="form-control" >
{% for op in account %}
<option value="{{ op.id }}">{{ op.username }}</option>
{% endfor %}
</select>
</div>
<button id="ajax_submit" type="button" class="btn btn-default">确认</button>
<button type="button" class="btn btn-default">取消</button>
</form>
</div>
</div>
</div>
<div id="testdic"></div>
<!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
<script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
<script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script>
function getAjax(v) { //通过get请求取值,获取模态对话框上面所需的值
$.ajax({
url: "/app01/ajax/",
type: "GET",
data: {'id': v },
dataType: 'json',
success: function(data){
$('#testdic').val(data)
console.log(data)
console.log(data['list'])
var dic_a = data['list'][0]['fields']
for ( var i in dic_a ){
console.log(i,dic_a[i])
$('#popup').find('[tname="' + i + '"]').val(dic_a[i]);
}
dic_a['account'] == "1" ? $('#checkbox_id').prop('checked',true):$('#checkbox_id').prop('checked',false)
}})
}
function test11(obj) { //点击编辑触发
var v = $(obj).parent().parent().find('[tname="id"]').text();
$('#popup').find('input[tname="id"]').val(v);
getAjax(v);
}
$('#ajax_submit').click(function () { //提交上传数据
$.ajax({
url: "/app01/ajax/",
type: "POST",
data: {'id': $('#id_id').val(),'title': $('#title_id').val(),'account_id':$('#account_id').val()},
dataType:'json',
success:function (data) {
//alert(data);//成功返回
if(data['status'] == "success" ){
location.reload();
}else{
alert(data['status']+ data['message']) //一般是显示
}
}
})
})
</script>
</body>
</html>
python
urls.py
from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from app01 import views
urlpatterns = [
path('index/',views.Index.as_view() ),
url(r'^table/$',views.Table_html.as_view(),name="Table_html"),
url(r'^ajax/$',views.Ajax.as_view(),name="Ajax"),
]
views.py
from django.shortcuts import render,redirect,HttpResponse
from django.http import JsonResponse
from django.views.generic import View
from .models import *
from django.views.generic import TemplateView
from django.core import serializers
import json
# Create your views here.
from django.views.decorators.csrf import csrf_exempt,csrf_protect
class Index(View):
def get(self,request):
name=request.GET['name']
print(name,"ssssss")
a2=Account.objects.get(username=name)
#a2.props_with_()
#print(a2['username'])
#b1=a1.article_set.all()
a1 = Account.objects.all()
#print()
#b1=Article.objects.filter(account=a1)
#b1=Article.objects.filter(account=a1)
print(a1)
return render(request,'templeate/index.html',locals())
class Table_html(TemplateView):
template_name = "templeate/app01/tb.html"
def get_context_data(self, **kwargs):
context = super(Table_html, self).get_context_data(**kwargs)
context['articles'] = Article.objects.all()
context['account'] = Account.objects.all()
return context
def post_context_data(self, **kwargs):
context = super(Table_html, self).post_context_data(**kwargs)
context['articles'] = Article.objects.all()
return context
class Ajax(View):
def get (self,request,**kwargs):
ret={'status':'success','message':'获取成功'}
"""请求数据"""
try:
date=Article.objects.filter(id=request.GET.get("id")) #serializers.serialize 转django模型只能是filter 不能转get
ret['list']=json.loads(serializers.serialize('json',date)) #构造json类型!!! 一定要json.loads,里面类型为str,需要转成json
except Exception as e:
ret['message']=e
return JsonResponse(ret)
def post(self, request,**kwargs):
"""提交表单"""
ret = {'status': 'success', 'message': '获取成功'}
try:
id=request.POST.get("id")
title=request.POST.get("title")
account_id=request.POST.get("account_id")
if title and len(title) > 3:
pass
v=Article.objects.filter(id=id)
v.update(title=title,account_id=account_id)
except Exception as e:
ret['message'] = e
return JsonResponse(ret)