Python 學習第二十天 django知識

來源:互聯網
上載者:User

標籤:ddr   .post   efault   div   項目   nal   隱藏   http   success   

一,django models

1,django ORM擷取後台資料的方式,總共有三種

(1)v1 = models.Business.objects.all()

    傳回值為QuerySet類型,內部元素都是對象

    [obj(id,caption,code),obj(id,caption,code),obj(id,caption,code)]

(2)v2 = models.Business.objects.all.values(‘id‘,‘caption‘)

        傳回值為QuerySet類型,內部元素都是字典

    [{‘id‘:1,‘caption‘:‘營運部‘},{‘id‘:2,‘caption‘:‘市場部‘},...]

(3)v3 = models.Business.objects.all.values_list(‘id‘,‘caption‘)

   傳回值為QuerySet類型,內部元素都是元組

   {(1,營運部),(2,開發)}

2,models.Business.objects.get(id=1) 擷取的值為一個對象,如果不存在就直接報錯

3,models.Business.objects.filter(id=1).first() 擷取的值為一個對象,不存在返回none

4,主機管理項目代碼,views.py取值為對象形式

(1) models 代碼from django.db import models# Create your models here.# class Foo(models.Model):#     name = models.CharField(max_length=1)class Business(models.Model):    # id    caption = models.CharField(max_length=32)    code = models.CharField(max_length=32,null=True,default="SA")    # fk = models.ForeignKey(‘Foo‘)class Host(models.Model):    nid = models.AutoField(primary_key=True)    hostname = models.CharField(max_length=32,db_index=True)    ip = models.GenericIPAddressField(protocol="ipv4",db_index=True)    port = models.IntegerField()    b = models.ForeignKey(to="Business", to_field=‘id‘)                          #b 為一個對象,封裝了Business表裡面的一行資料(2) views.py代碼def host(request):     v1 = models.Host.objects.filter(nid__gt=0)                                  #相當於models.Host.objects.all()     for row in v1:  print(row.nid,row.hostname,row.ip,row.port,row.b_id,row.b.caption,row.b.code,row.b.id,sep=‘\t‘)    return HttpResponse(request,‘host.html‘,{‘v1‘:v1})(3)templates  host.html    <table border="1">        <thead>            <tr>                <th>序號</th>                <th>主機名稱</th>                <th>IP</th>                <th>連接埠</th>                <th>業務線名稱</th>                <th>操作</th>            </tr>        </thead>        <tbody>                {% for row in v1 %}                    <tr hid="{{ row.nid }}" bid="{{ row.b_id }}">                        #隱藏掉Host的nid列和Business的id列                        <td>{{ forloop.counter }}</td>                        <td>{{ row.hostname }}</td>                        <td>{{ row.ip }}</td>                        <td>{{ row.port }}</td>                        <td>{{ row.b.caption }}</td>                        <td>                            <a class="edit">編輯</a>|<a class="delete">刪除</a>                        </td>                    </tr>                {% endfor %}        </tbody>    </table>

 5,主機管理,views.py取值為字典形式

(1)views.py代碼def host(request):     v2 = models.Host.objects.filter(nid__gt=0).values(‘nid‘,‘hostname‘,‘b_id‘,‘b__caption‘)  #b跨表查詢為__雙下划下     # QuerySet: [ {} ]     # print(v2)     # for row in v2:     #     print(row[‘nid‘],row[‘hostname‘],row[‘b_id‘],row[‘b__caption‘])     return render(request,‘host.html‘,{‘v2‘:v2})(2)templates  html 代碼    <h1>主機列表(字典)</h1>    <table border="1">        <thead>            <tr>                <th>主機名稱</th>                <th>業務線名稱</th>            </tr>        </thead>        <tbody>            {% for row in v2 %}                <tr hid="{{ row.nid }}" bid="{{ row.b_id }}">                    <td>{{ row.hostname }}</td>                    <td>{{ row.b__caption }}</td>                </tr>            {% endfor %}        </tbody>    </table>

 6,主機管理,views.py取值為元組形式

(1)views.py 代碼def host(request):    v3 = models.Host.objects.filter(nid__gt=0).values_list(‘nid‘,‘hostname‘,‘b_id‘,‘b__caption‘)    # QuerySet: [()]    # print(v2)     return render(request, ‘host.html‘, {‘v3‘: v3})(2)templates  html代碼    <h1>主機列表(元組)</h1>    <table border="1">        <thead>            <tr>                <th>主機名稱</th>                <th>業務線名稱</th>            </tr>        </thead>        <tbody>            {% for row in v3 %}                <tr hid="{{ row.0 }}" bid="{{ row.2 }}">                    <td>{{ row.1 }}</td>                    <td>{{ row.3 }}</td>                </tr>            {% endfor %}        </tbody>    </table>

 7,templates 中的for 迴圈的特殊值

 (1)forloop.counter 迴圈計數器(從1開始計數,可以用作序號列)

 (2)forloop.counter0 迴圈計數器(從0開始計數)

 (3)forloop.revcounter 迴圈計數器(倒序從從1開始計數)

 (4)forloop.revcounter0 迴圈計數器(倒序從0開始計數)

 (5)forloop.last 是否是最後一個 forloop.first是否是第一個

8, ajax 內容

(1)ajax 前端程式碼範例

$.ajax({url: ‘/host‘,                                        #提交的urltype: "POST",                                        #提交的方式data: {‘k1‘: 123,‘k2‘: "root"},                      #提交的資料success: function(data){                             #後台返回資料後,觸發的函數// data是伺服器端返回的字串    var obj = JSON.parse(data);}})

 (2)ajax views.py返回的時候需要用HttpResponse("字串")

      如果view.py擷取的值為字典,則需要用json.dumps("字典"),然後返回 return HttpResponse(json.dumps("字典")

        前端接收字串之後進行還原序列化轉化成對象 在Javascript 中用var obj=JSON.parse(data)

    前端將對象轉化成字串,在Javascript中用JSON.stringify(),例如 list=[1,2,3,4],將列錶轉化為字串J SON.stringify(list)

 (3)ajax 後台返回可用HttpResponse() 和render(只含有字串)

 (4)ajax 擷取form 中的所有值data:$(‘#add_form‘).serialize()

9,models 多對多自訂關係表定義方式 

class Host(models.Model):nid = models.AutoField(primary_key=True)hostname = models.CharField(max_length=32,db_index=True)ip = models.GenericIPAddressField(protocol="ipv4",db_index=True)port = models.IntegerField()b = models.ForeignKey(to="Business", to_field=‘id‘)class Application(models.Model):name = models.CharField(max_length=32)class HostToApp(models.Model):hobj = models.ForeignKey(to=‘Host‘,to_field=‘nid‘)                   #Host表中的一行對象aobj = models.ForeignKey(to=‘Application‘,to_field=‘id‘)             #Application表中的一行對象

 10,models 自動建立多對多關係表

 (1)models.py程式碼範例

class Host(models.Model):nid = models.AutoField(primary_key=True)hostname = models.CharField(max_length=32,db_index=True)ip = models.GenericIPAddressField(protocol="ipv4",db_index=True)port = models.IntegerField()b = models.ForeignKey(to="Business", to_field=‘id‘)class Application(models.Model):name = models.CharField(max_length=32)r = models.ManyToManyField("Host")                        #預設最多隻能建立兩列的關聯關係

 (2)資料操作

   1, obj =Application.objects.get(id=1)

     obj 對象包含兩個內容,obj.name,obj.r,

     如果要增加值obj.r.add(1) 表示在第三張表中增加一個1,對應1,即host id為1,application id為1

     obj.r.add(2) 表示在第三張表中增加一個1,對應2,即host id 為2,application id 為1

            另外增加可以傳一個列表[1,2,3,4]  obj.r.add(*[1,2,3,4])增加一個application id 為1,host id 為1,2,3,4 即1-1,1-2,1-3,1-4

        2,  obj.r.remove(1),刪除掉1-1

     obj.r.remove(*[1,2,3]),刪除1-1,1-2,1-3

     obj.r.remove(2,4),刪除1-2,1-4

        3,obj.r.clear() 清除application為1的所有關聯資料

     4,obj.r.set([3,5,7])表示設定application為1,所有關聯只有3,5,7,即只有1-3,1-5,1-7

     5,obj.r.all()擷取所有application id 為1 的關聯的主機對象“列表”

11,ajax 內容補充 

 (1)

$.ajax({url: ‘/host‘,                                        #提交的urltype: "POST",                                        #提交的方式data: {‘k1‘: 123,‘k2‘: "root"},                      #提交的資料        dataType:‘JSON‘,                                     #將後台返回的資料轉化為json對象,不再需要JSON.parse轉化success: function(obj){                              #後台返回obj對象,觸發的函數// data是伺服器端返回的字串}})

 (2)發給後端的資料包含列表

$.ajax({url: ‘/host‘,                                        #提交的urltype: "POST",                                        #提交的方式data: {‘k1‘: 123,‘host_list‘: [1,2,3]},                      #提交的資料        dataType:‘JSON‘,                                     #將後台返回的資料轉化為json對象,不再需要JSON.parse轉化        traditional:true,                                       #將host_list列錶轉為字串success: function(obj){                              #後台返回obj對象,觸發的函數// data是伺服器端返回的字串}})#views.py擷取 request.POST.getlist(‘host_list‘)                        #可以擷取host_list列表中的所有值

 

 

    

Python 學習第二十天 django知識

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.