博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django 和 Ajax 简介
阅读量:6303 次
发布时间:2019-06-22

本文共 2903 字,大约阅读时间需要 9 分钟。

在Django里面,目前我们都是通过前端页面的form提交GET或者POST请求到后台,后台处理了业务函数之后,把渲染之后的字符串结果发回给前端。这样的结果是每次页面都会进行刷新。

假设一个场景我们使用了模态对话框,正常界面打开的话,对话框一般都是隐藏的。如果点开了对话框,在模态对话框提交的POST请求之后,返回的页面因为重新刷新了,他会自动隐藏对话框,那如何在模态对话框的界面做到数据的验证?这里很明显我们需要和后台交换数据,但是同时又不能刷新页面。这里就需要使用AJAX了。

Javscrpt 里面AJAX的基本结构很简单,比如

1
2
3
4
5
6
7
8
9
$.ajax({
    
url:
'/host'
,        
//提交的url,类似form的action
    
type:
'POST'
,        
//提交的类型,类似form的method
    
data:{
'k1'
:123,
'k2'
:
'root'
},  
//提交的数据
    
success:
function
(data){    
//如果成功,那么执行这个方法,参数data是服务器的返回值,一般建议使用字典格式,字符串的字典需要做一个反序列化的操作
        
var 
obj=JSON.parse(data)
    
}
}
)

下面看看实例。

urls.py片段, /test_ajax指向 views.test_ajax 函数

1
2
3
4
5
6
7
8
9
urlpatterns 
= 
[
    
url(r
'^admin/'
, admin.site.urls),
    
url(r
'^business$'
, views.business),
    
url(r
'^host$'
, views.host),
    
url(r
'^test_ajax$'
, views.test_ajax),
    
url(r
'^app$'
, views.app),
    
url(r
'^ajax_add_app$'
, views.ajax_add_app),
     
]

views.py片段,在该函数里面,自定义了一个返回值字典。这样无论成功与否,都会返回一个数据给前端

里面做了一个简单的判断 如果host长度小于5,返回数据‘主机名字太短了’;如果数据库表的类型不匹配,会捕获异常,返回结果'请求错误',注意json.dumps(ret) 因为 HttpResponse返回的是字符串,因此我们需要序列化一下字典对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def 
test_ajax(request):
    
ret 
= 
{
'status'
True
'error'
None
'data'
None
}
    
try
:
        
= 
request.POST.get(
'hostname'
)
        
= 
request.POST.get(
'ip'
)
        
= 
request.POST.get(
'port'
)
        
= 
request.POST.get(
'b_id'
)
        
if 
and 
len
(h) > 
5
:
            
models.Host.objects.create(hostname
=
h,
                                           
ip
=
i,
                                           
port
=
p,
                                           
b_id
=
b)
        
else
:
            
ret[
'status'
= 
False
            
ret[
'error'
= 
"主机名字太短了"
    
except 
Exception as e:
        
ret[
'status'
= 
False
        
ret[
'error'
= 
'请求错误'
    
return 
HttpResponse(json.dumps(ret))

host.html片段页面布局

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
   
<
div 
class
=
"add-modal hide"
>
        
<
form 
id
=
"add_form" 
method
=
"POST" 
action
=
"/host"
>
            
<
div 
class
=
"group"
>
                
<
input 
id
=
"host" 
type
=
"text" 
placeholder
=
"主机名" 
name
=
"hostname" 
/>
            
</
div
>
            
<
div 
class
=
"group"
>
                
<
input 
id
=
"ip" 
type
=
"text" 
placeholder
=
"IP" 
name
=
"ip" 
/>
            
</
div
>
            
<
div 
class
=
"group"
>
                
<
input 
id
=
"port" 
type
=
"text" 
placeholder
=
"端口" 
name
=
"port" 
/>
            
</
div
>
            
<
div 
class
=
"group"
>
                
<
select 
id
=
"sel" 
name
=
"b_id"
>
                    
{% for op in b_list %}
                    
<
option 
value
=
"{
{ op.id }}"
>{
{ op.caption }}</
option
>
                    
{% endfor %}
                
</
select
>
            
</
div
>
            
<
input 
type
=
"submit" 
value
=
"提交" 
/>
            
<
a 
id
=
"ajax_submit" 
>悄悄提交</
a
>
            
<
input 
id
=
"cancel" 
type
=
"button" 
value
=
"取消" 
/>
            
<
span 
id
=
"erro_msg" 
style
=
"color: red"
></
span
>
        
</
form
>

jquery片段,注意JSON.parse(data),需要做一个反序列化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$(
'#ajax_submit'
).click(
function
(){
                
$.ajax({
                    
url: 
"/test_ajax"
,
                    
type: 
'POST'
,
                    
data: {
'hostname'
: $(
'#host'
).val(), 
'ip'
: $(
'#ip'
).val(), 
'port'
: $(
'#port'
).val(), 
'b_id'
: $(
'#sel'
).val()},
               
                    
success: 
function
(data){
                        
var 
obj = JSON.parse(data);
                        
if
(obj.status){
                            
location.reload();
                        
}
else
{
                            
$(
'#erro_msg'
).text(obj.error);
                        
}
                    
}
                
})

运行结果:

主机名小于5

数据类型不对报错

本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1951021,如需转载请自行联系原作者
你可能感兴趣的文章
Openstack组建部署 — Environment of Controller Node
查看>>
第一章:初识css3
查看>>
在线API地址
查看>>
arcgis js 加载动态层图片
查看>>
Memcached 结构分析
查看>>
arguments callee caller
查看>>
自关联
查看>>
【kd-tree】bzoj2648 SJY摆棋子
查看>>
致命错误 RC1121: RC : fatal error RC1121 : I/O error reading file
查看>>
TCP 协议之三次握手(一)
查看>>
【BZOJ】1572: [Usaco2009 Open]工作安排Job
查看>>
hystrix实战总结;
查看>>
Git查看远程本地分支/远程分支关系
查看>>
java分享第四天(循环)
查看>>
算法导论2.3-7
查看>>
vue-cli3使用webpack-spritesmith配置雪碧图
查看>>
网络概述:TCP-IP协议
查看>>
依赖注入的威力,.NET Core的魅力:解决MVC视图中的中文被html编码的问题
查看>>
【dfs套dfs套dfs】算24点
查看>>
@ResponseBody 注解
查看>>