Python篇-Django框架详解(三)

2018-02-27 11:24:14来源:https://www.jianshu.com/p/437e2a437ff8作者:TianTianBaby223人点击

分享


TZ : 早睡早起,方能养生


一 : 科普一分钟

Ajax 不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术,用于web端的异步请求.
对于多表的ORM 该如何创建,删除,关联它们之间的关系,Django为我们提供了很多方法,让我们来揭开神秘的面纱吧.




配图.png
二 : ORM获取对象模式
内部元素是对象 stu是一个 对像列表[obj1,obj2]
stu = models.Student.objects.all()

内部元素都是字典 stu是一个字典列表 [ {'name':'tz','age':'26'} ]
stu  = models.Student.objects.all().values('name','age')

内部元素都是元组 stu是一个元祖列表 [(雪芙,24),(容姿,23)]
stu = models.Business.Student.all().values_list('name','age')

三 : Ajax

Asynchronous Javascript And XML - > 异步 JavaScript 和 XML
通常用于web端与服务端的交互,可以直接在前台页面 JavaScript 调用后台页面的方法.
我们对某个标签进行绑定,然后进行Ajax请求, 可以看代码感觉一下 很像移动端安卓的Volley或者iOS的AFN网络请求框架.拿到后台返回的数据进行页面操作.


页面进行JS操作
$('#TZajax').click(function(){
$.ajax({
url: "/myajax",
type: 'POST',
//data: {'hostname': $('#host').val(), 'ip': $('#ip').val(), 'port': $('#port').val(), 'b_id': $('#sel').val()},
#可以直接拿到表单对应的数据进行请求
data: $('#add_form').serialize(),
success: function(data){
#解码成json格式
var obj = JSON.parse(data);
if(obj.status){
#True 重新刷新页面
location.reload();
}else{
#弹出错误信息
$('#erro_msg').text(obj.error);
}
}
})
});

服务端进行处理操作
def myajax(request):
ret = {'status': True, 'error': None, 'data': 'hahaha'}
try:
h = request.POST.get('hostname')
i = request.POST.get('ip')
p = request.POST.get('port')
b = request.POST.get('b_id')
if h 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))

四 : 多对多表操作

在A 表中的一行可以匹配 B 表中的多行,反之亦然。要创建这种关系,需要定义第三个表,称为[结合表],它的主键由 A 表和 B 表的外部键组成。例如,authorstitles 表具有多对多关系,这是由于这些表都与 titleauthors 表具有一对多关系。titleauthors 表的主键是 au_id 列(authors 表的主键)和 title_id 列(titles 表的主键)的组合。


关系图



关系


自定义关系表
#表一
class Student(models.Model):
nid = models.AutoField(primary_key=True)
studentname = models.CharField(max_length=32,db_index=True)


#表二
class Course(models.Model):
name = models.CharField(max_length=32)
#关系表
class StudentAndCourse(models.Model):
hobj = models.ForeignKey(to='Student',to_field='nid')
aobj = models.ForeignKey(to='Course',to_field='id')

自动创建关系表
方式二:自动创建关系表
#表一
class Student(models.Model):
nid = models.AutoField(primary_key=True)
studentname = models.CharField(max_length=32,db_index=True)

#表二
class Course(models.Model):
name = models.CharField(max_length=32)
r = models.ManyToManyField("Student")
#########
无法直接对第三张表进行操作,通过r 对关系表进行操作

obj = Course.objects.get(id=1)
obj.name

# 第三张表操作 对id为1 的添加学生关系
obj.r.add(1)
obj.r.add(2)
obj.r.add(2,3,4)
#添加一组列表
obj.r.add(*[1,2,3,4])

#移除关系
obj.r.remove(1)
obj.r.remove(2,4)
#移除一组关系
obj.r.remove(*[1,2,3])

#清除所有关系
obj.r.clear()

#重置关系
obj.r.set([3,5,7])

# 获取所有相关的对象“列表” QuerySet
obj.r.all()

五 : 总结

我们可以给Ajax返回json接口, 应用于web端,也就是说,对于移动端,我们也可以用同样的方法写一个后台接口,让移动端调用,并且返回相应的数据.有移动端基础的同学,也可以尝试一下自己做一个接口,并且测试一下返回数据,多多尝试,下期再见.








最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台