TZ : 早睡早起,方能養(yǎng)生
一 : 科普一分鐘
Ajax
不是一種新的編程語(yǔ)言俯画,而是一種用于創(chuàng)建更好更快以及交互性更強(qiáng)的Web應(yīng)用程序的技術(shù),用于web端的異步請(qǐng)求.
對(duì)于多表的ORM
該如何創(chuàng)建,刪除,關(guān)聯(lián)它們之間的關(guān)系,Django
為我們提供了很多方法,讓我們來(lái)揭開(kāi)神秘的面紗吧.
二 : ORM獲取對(duì)象模式
- 內(nèi)部元素是對(duì)象
stu
是一個(gè) 對(duì)像列表[obj1,obj2]
stu = models.Student.objects.all()
- 內(nèi)部元素都是字典
stu
是一個(gè)字典列表 [ {'name':'tz','age':'26'} ]
stu = models.Student.objects.all().values('name','age')
- 內(nèi)部元素都是元組
stu
是一個(gè)元祖列表 [(雪芙,24),(容姿,23)]
stu = models.Business.Student.all().values_list('name','age')
三 : Ajax
Asynchronous Javascript And XML
- > 異步 JavaScript 和 XML
通常用于web端與服務(wù)端的交互,可以直接在前臺(tái)頁(yè)面 JavaScript 調(diào)用后臺(tái)頁(yè)面的方法.
我們對(duì)某個(gè)標(biāo)簽進(jìn)行綁定,然后進(jìn)行Ajax
請(qǐng)求, 可以看代碼感覺(jué)一下 很像移動(dòng)端安卓的Volley
或者iOS的AFN
網(wǎng)絡(luò)請(qǐng)求框架.拿到后臺(tái)返回的數(shù)據(jù)進(jìn)行頁(yè)面操作.
- 頁(yè)面進(jìn)行JS操作
$('#TZajax').click(function(){
$.ajax({
url: "/myajax",
type: 'POST',
//data: {'hostname': $('#host').val(), 'ip': $('#ip').val(), 'port': $('#port').val(), 'b_id': $('#sel').val()},
#可以直接拿到表單對(duì)應(yīng)的數(shù)據(jù)進(jìn)行請(qǐng)求
data: $('#add_form').serialize(),
success: function(data){
#解碼成json格式
var obj = JSON.parse(data);
if(obj.status){
#True 重新刷新頁(yè)面
location.reload();
}else{
#彈出錯(cuò)誤信息
$('#erro_msg').text(obj.error);
}
}
})
});
- 服務(wù)端進(jìn)行處理操作
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'] = "請(qǐng)求參數(shù)錯(cuò)誤"
except Exception as e:
ret['status'] = False
ret['error'] = '請(qǐng)求錯(cuò)誤'
return HttpResponse(json.dumps(ret))
四 : 多對(duì)多表操作
在A 表中的一行可以匹配 B 表中的多行,反之亦然敦冬。要?jiǎng)?chuàng)建這種關(guān)系搬泥,需要定義第三個(gè)表桑寨,稱為[結(jié)合表],它的主鍵由 A 表和 B 表的外部鍵組成。例如忿檩,authors
和 titles
表具有多對(duì)多關(guān)系尉尾,這是由于這些表都與 titleauthors
表具有一對(duì)多關(guān)系。titleauthors
表的主鍵是 au_id
列(authors
表的主鍵)和 title_id
列(titles
表的主鍵)的組合燥透。
- 關(guān)系圖
- 自定義關(guān)系表
#表一
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)
#關(guān)系表
class StudentAndCourse(models.Model):
hobj = models.ForeignKey(to='Student',to_field='nid')
aobj = models.ForeignKey(to='Course',to_field='id')
- 自動(dòng)創(chuàng)建關(guān)系表
方式二:自動(dòng)創(chuàng)建關(guān)系表
#表一
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")
#########
無(wú)法直接對(duì)第三張表進(jìn)行操作,通過(guò)r 對(duì)關(guān)系表進(jìn)行操作
obj = Course.objects.get(id=1)
obj.name
# 第三張表操作 對(duì)id為1 的添加學(xué)生關(guān)系
obj.r.add(1)
obj.r.add(2)
obj.r.add(2,3,4)
#添加一組列表
obj.r.add(*[1,2,3,4])
#移除關(guān)系
obj.r.remove(1)
obj.r.remove(2,4)
#移除一組關(guān)系
obj.r.remove(*[1,2,3])
#清除所有關(guān)系
obj.r.clear()
#重置關(guān)系
obj.r.set([3,5,7])
# 獲取所有相關(guān)的對(duì)象“列表” QuerySet
obj.r.all()
五 : 總結(jié)
我們可以給Ajax
返回json
接口, 應(yīng)用于web端,也就是說(shuō),對(duì)于移動(dòng)端,我們也可以用同樣的方法寫(xiě)一個(gè)后臺(tái)接口,讓移動(dòng)端調(diào)用,并且返回相應(yīng)的數(shù)據(jù).有移動(dòng)端基礎(chǔ)的同學(xué),也可以嘗試一下自己做一個(gè)接口,并且測(cè)試一下返回?cái)?shù)據(jù),多多嘗試,下期再見(jiàn).