Python篇-Django框架詳解(三)

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)神秘的面紗吧.

配圖.png

二 : 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 表的外部鍵組成。例如忿檩,authorstitles 表具有多對(duì)多關(guān)系尉尾,這是由于這些表都與 titleauthors 表具有一對(duì)多關(guān)系。titleauthors 表的主鍵是 au_id 列(authors 表的主鍵)和 title_id 列(titles 表的主鍵)的組合燥透。

  • 關(guān)系圖
    關(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).

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末沙咏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子班套,更是在濱河造成了極大的恐慌肢藐,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吱韭,死亡現(xiàn)場(chǎng)離奇詭異吆豹,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)理盆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)痘煤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人猿规,你說(shuō)我怎么就攤上這事衷快。” “怎么了姨俩?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵蘸拔,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我哼勇,道長(zhǎng)都伪,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任积担,我火速辦了婚禮陨晶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘帝璧。我一直安慰自己先誉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布的烁。 她就那樣靜靜地躺著褐耳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪渴庆。 梳的紋絲不亂的頭發(fā)上铃芦,一...
    開(kāi)封第一講書(shū)人閱讀 51,443評(píng)論 1 302
  • 那天雅镊,我揣著相機(jī)與錄音,去河邊找鬼刃滓。 笑死仁烹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的咧虎。 我是一名探鬼主播卓缰,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼砰诵!你這毒婦竟也來(lái)了征唬?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤茁彭,失蹤者是張志新(化名)和其女友劉穎总寒,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體理肺,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡偿乖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了哲嘲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贪薪。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖眠副,靈堂內(nèi)的尸體忽然破棺而出画切,到底是詐尸還是另有隱情,我是刑警寧澤囱怕,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布霍弹,位于F島的核電站,受9級(jí)特大地震影響娃弓,放射性物質(zhì)發(fā)生泄漏典格。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一台丛、第九天 我趴在偏房一處隱蔽的房頂上張望耍缴。 院中可真熱鬧,春花似錦挽霉、人聲如沸防嗡。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蚁趁。三九已至,卻和暖如春实胸,著一層夾襖步出監(jiān)牢的瞬間他嫡,已是汗流浹背番官。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留钢属,地道東北人鲤拿。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像署咽,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子生音,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 3,811評(píng)論 0 11
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法宁否,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法缀遍,繼承相關(guān)的語(yǔ)法慕匠,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,631評(píng)論 18 399
  • 自定義控件學(xué)習(xí)https://github.com/GcsSloop/AndroidNote/tree/maste...
    wo叫天然呆閱讀 9,009評(píng)論 10 140
  • “只要你還能睡覺(jué)域醇,我們就會(huì)永遠(yuǎn)在一起台谊。” 永遠(yuǎn)在一起 作者/曹暢洲 寺島先生在一場(chǎng)空難中不幸遇難譬挚,他的女友幸子聽(tīng)聞...
    云間藍(lán)閱讀 669評(píng)論 1 4
  • 之前讀過(guò)哈佛商學(xué)院營(yíng)銷學(xué)教授安妮塔·埃爾伯斯的(爆款)锅铅。她在文章中寫(xiě)道有關(guān)爆款策略很多的商業(yè)作用,比如:蘋(píng)果手機(jī)减宣、...
    松松勁柏閱讀 183評(píng)論 0 0