zoukankan      html  css  js  c++  java
  • web框架Django(三)

     
    第二十章: django(三,多对多)
     
    1、Django请求的生命周期
            路由系统 -> 视图函数(获取模板+数据-->渲染) -> 字符串返回给用户
     
    2、路由系统
            /index/                ->  函数或类.as_view()
            /detail/(d+)          ->  函数(参数) 或 类.as_view()(参数)
            /detail/(?P<nid>d+)   ->  函数(参数) 或 类.as_view()(参数)
            /detail/               ->  include("app01.urls")
            /detail/    name='a1'  ->  include("app01.urls")
                                   - 视图中:reverse
                                   - 模板中:{% url "a1" %}
     
    3、视图
        FBV:函数
            def index(request,*args,**kwargs):
                ..
     
        CBV:类
            class Home(views.View):
     
                def get(self,reqeust,*args,**kwargs):
                    ..
     
        获取用户请求中的数据:
            request.POST.get
            request.GET.get
            reqeust.FILES.get()
     
            # checkbox,
            ........getlist()
     
            request.path_info
     
     
            文件对象 = reqeust.FILES.get()
            文件对象.name
            文件对象.size
            文件对象.chunks()
     
            # <form 特殊的设置></form>
     
        给用户返回数据:
            render(request, "模板的文件的路径", {'k1': [1,2,3,4],"k2": {'name': '张扬','age': 73}})
            redirect("URL")
            HttpResponse(字符串)
     
    4、模板语言
            render(request, "模板的文件的路径", {'obj': 1234, 'k1': [1,2,3,4],"k2": {'name': '张扬','age': 73}})
     
        <html>
     
        <body>
            <h1> {{ obj }} </h1>
            <h1> {{ k1.3 }} </h1>
            <h1> {{ k2.name }} </h1>
            {% for i in k1 %}
                <p> {{ i }} </p>
            {% endfor %}
     
            {% for row in k2.keys %}
                {{ row }}
            {% endfor %}
     
            {% for row in k2.values %}
                {{ row }}
            {% endfor %}
     
            {% for k,v in k2.items %}
                {{ k }} - {{v}}
            {% endfor %}
     
        </body>
        </html>
     
    5、ORM
        a. 创建类和字段
            class User(models.Model):
                age = models.IntergerFiled()
                name = models.CharField(max_length=10)#字符长度
     
            Python manage.py makemigrations
            python manage.py migrate
     
            # settings.py 注册APP
     
        b. 操作
            增
                models.User.objects.create(name='qianxiaohu',age=18)
                dic = {'name': 'xx', 'age': 19}
                models.User.objects.create(**dic)
     
     
                obj = models.User(name='qianxiaohu',age=18)
                obj.save()
            删
                models.User.objects.filter(id=1).delete()
            改
                models.User.objects.filter(id__gt=1).update(name='alex',age=84)
                dic = {'name': 'xx', 'age': 19}
                models.User.objects.filter(id__gt=1).update(**dic)
            查
                models.User.objects.filter(id=1,name='root')
                models.User.objects.filter(id__gt=1,name='root')
                models.User.objects.filter(id__lt=1)
                models.User.objects.filter(id__gte=1)
                models.User.objects.filter(id__lte=1)
     
                models.User.objects.filter(id=1,name='root')
                dic = {'name': 'xx', 'age__gt': 19}
                models.User.objects.filter(**dic)
     
    6、获取单表单数据的三种方式(views.py )
              def business(request):
                v1 = models.Business.objects.all()
                # QuerySet ,内部元素都是对象
     
                v2 = models.Business.objects.all().values('id','caption')
                # QuerySet ,内部元素都是字典
                
                v3 = models.Business.objects.all().values_list('id','caption')
                # QuerySet ,内部元素都是元组
     
                 return render(request, 'business.html', {'v1': v1,'v2': v2, 'v3': v3})
     
                特别注意
                # 获取到的一个对象,如果不存在就报错
                models.Business.objects.get(id=1)
                但可以用下面的方式来获取对象
                对象或者None = models.Business.objects.filter(id=1).first()
     
    from django.shortcuts import render, HttpResponse, redirect
    from  app01 import models
    import json
    
    
    # Create your views here.
    def business(request):
        v1 = models.Business.objects.all()
    
        v2 = models.Business.objects.all().values('id', 'caption', 'code')
    
        v3 = models.Business.objects.all().values_list('id', 'caption', 'code')
    
        return render(request, 'business.html', {'v1': v1, 'v2': v2, 'v3': v3})
    
    
    def host(request):
        if request.method == "GET":
            v1 = models.Host.objects.filter(nid__gt=0)
            v2 = models.Host.objects.filter(nid__gt=0).values('nid', 'hostname', 'b_id', 'b__caption')
            v3 = models.Host.objects.filter(nid__gt=0).values_list('nid', 'hostname', 'b_id', 'b__caption')
    
            b_list = models.Business.objects.all()
    
            return render(request, 'host.html', {'v1': v1, 'v2': v2, 'v3': v3, 'b_list': b_list})
    
        elif request.method == "POST":
    
            h = request.POST.get('hostname')
            i = request.POST.get('ip')
            p = request.POST.get('port')
            b = request.POST.get('b_id')
            models.Host.objects.create(hostname=h,
                                       ip=i,
                                       port=p,
                                       b_id=b
                                       )
            return redirect('/host')
    
    
    def test_ajax(request):
    
        ret = {'status': True, 'error': None, 'data': None}
        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))
    
    views.py
    View.py
     1 from django.db import models
     2 
     3 # Create your models here.
     4 
     5 class Business(models.Model):
     6     caption = models.CharField(max_length=32)
     7     code = models.CharField(max_length=32)
     8 
     9 class Host(models.Model):
    10 
    11     nid = models.AutoField(primary_key=True)
    12     hostname = models.CharField(max_length=32,db_index=True)
    13     ip = models.GenericIPAddressField(db_index=True)
    14     port = models.IntegerField()
    15     b = models.ForeignKey(to="Business",to_field='id')
    16 
    17 models.py
    models.py
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style>
            .hide {
                display: none;
            }
    
            .shade {
                position: fixed;
                top: 0;
                right: 0;
                left: 0;
                bottom: 0;
                background: black;
                opacity: 0.6;
                z-index: 100;
            }
    
            .add-modal, .edit-modal, .delete-modal {
                position: fixed;
                height: 300px;
                 400px;
                top: 100px;
                left: 50%;
                z-index: 101;
                border: 1px solid red;
                background: white;
                margin-left: -200px;
            }
        </style>
    </head>
    <body>
    <h1>主机列表(对象)</h1>
    <div>
        <input id="add_host" type="button" value="添加"/>
    </div>
    <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 }}">
                <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>
    
    <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>
    <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>
    
    <div class="shade hide"></div>
    <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>
    </div>
    
    <div class="edit-modal hide">
        <form id="edit_form" method="POST" action="/host">
            <input type="text" name="nid" style="display:none"/>
            <input type="text" placeholder="主机名" name="hostname"/>
            <input type="text" placeholder="IP" name="ip"/>
            <input type="text" placeholder="端口" name="port"/>
            <select name="b_id">
                {% for op in b_list %}
                    <option value="{{ op.id }}">{{ op.caption }}</option>
                {% endfor %}
            </select>
            <a id="ajax_submit_edit">确认编辑</a>
            <input id="ajax_submit_cancel" type="button" value="取消"/>
        </form>
    </div>
    <div class="delete-modal hide">
        <form id="delete_form" method="POST" action="/host">
            <input type="text" name="nid" style="display:none"/>
            <input type="text" placeholder="主机名" name="hostname"/>
            <input type="text" placeholder="IP" name="ip"/>
            <input type="text" placeholder="端口" name="port"/>
            <select name="b_id">
                {% for op in b_list %}
                    <option value="{{ op.id }}">{{ op.caption }}</option>
                {% endfor %}
            </select>
            <a id="submit_delete">确认删除</a>
            <input id="submit_cancle" type="button" value="取消"/>
        </form>
    
    
    </div>
    
    <script src="/static/jquery-1.12.4.js"></script>
    <script>
        $(function () {
    
            $('#add_host').click(function () {
                $('.shade,.add-modal').removeClass('hide');
            });
    
    
            $('#cancel').click(function () {
                $('.shade,.add-modal').addClass('hide');
            });
    
            $('#ajax_submit').click(function () {
                $.ajax({
                    url: "/test_ajax",
                    type: 'POST',
                    //data: {'hostname': $('#host').val(), 'ip': $('#ip').val(), 'port': $('#port').val(), 'b_id': $('#sel').val()},
                    data: $('#add_form').serialize(),
                    success: function (data) {
                        var obj = JSON.parse(data);
                        if (obj.status) {
                            location.reload();
                        } else {
                            $('#erro_msg').text(obj.error);
                        }
                    }
                })
            });
    
            $('.edit').click(function () {
                $('.shade,.edit-modal').removeClass('hide');
    
                var bid = $(this).parent().parent().attr('bid');
                var nid = $(this).parent().parent().attr('hid');
    
                $('#edit_form').find('select').val(bid);
                $('#edit_form').find('input[name="nid"]').val(nid);
                // 修改
                /*
                 $.ajax({
                 data: $('#edit_form').serialize()
                 });
                 */
                // modeletes.Host.objects.filter(nid=nid).update()
            });
            $('#ajax_submit_cancel').click(function () {
                $('.shade,.edit-modal').addClass('hide');
            });
    
    
            $('.delete').click(function () {
                $('.shade,.delete-modal').removeClass('hide');
    
                var bid = $(this).parent().parent().attr('bid');
                var nid = $(this).parent().parent().attr('hid');
    
                $('#delete_form').find('select').val(bid);
                $('#delete_form').find('input[name="nid"]').val(nid);
            });
            $('#submit_cancle').click(function () {
                $('.shade,.delete-modal').addClass('hide');
            });
    
        })
    </script>
    
    </body>
    </html>
    
    host.html
    host.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <h1>业务线列表(对象)</h1>
        <ul>
            {% for row in v1 %}
                <li>{{ row.id }} - {{ row.caption }} - {{ row.code }}</li>
            {% endfor %}
        </ul>
        <h1>业务线列表(字典)</h1>
        <ul>
            {% for row in v2 %}
                <li>{{ row.id }} - {{ row.caption }}- {{ row.code }}</li>
            {% endfor %}
        </ul>
        <h1>业务线列表(元组)</h1>
        <ul>
            {% for row in v3 %}
                <li>{{ row.0 }} - {{ row.1 }}- {{ row.2 }}</li>
            {% endfor %}
        </ul>
    </body>
    </html>
    
    business.html
    business
     1 """s14day20 URL Configuration
     2 
     3 The `urlpatterns` list routes URLs to views. For more information please see:
     4     https://docs.djangoproject.com/en/1.10/topics/http/urls/
     5 Examples:
     6 Function views
     7     1. Add an import:  from my_app import views
     8     2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home')
     9 Class-based views
    10     1. Add an import:  from other_app.views import Home
    11     2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
    12 Including another URLconf
    13     1. Import the include() function: from django.conf.urls import url, include
    14     2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
    15 """
    16 from django.conf.urls import url
    17 from django.contrib import admin
    18 from app01 import views
    19 urlpatterns = [
    20     url(r'^admin/', admin.site.urls),
    21     url(r'^business$', views.business),
    22     url(r'^host$', views.host),
    23     url(r'^test_ajax$', views.test_ajax),
    24     url(r'^app$', views.app),
    25     url(r'^ajax_add_app$', views.ajax_add_app),
    26     # url(r'^business_add', views.business),
    27 ]
    28 
    29 url.py
    url.py
    7、 一对多块表操作的的三种方式(views.py )
     
    def host(request):
        v1 = models.Host.objects.filter(nid__gt=0)
        # QuerySet [hostobj(ip.host,另外一个对象(..)),]
        # 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=' ')  -->sep间隔符显示
        #     print(row.b.fk.name)  
        # return HttpResponse("Host")
        v2 = models.Host.objects.filter(nid__gt=0).values('nid','hostname','b_id','b__caption')
         特别注意:这里跨表操作只能用__(双下划线)
        # QuerySet: [ {} ]
        # print(v2)
        # for row in v2:
        #     print(row['nid'],row['hostname'],row['b_id'],row['b__caption'])
     
        v3 = models.Host.objects.filter(nid__gt=0).values_list('nid','hostname','b_id','b__caption')
        # QuerySet: [ {} ]
        # print(v2)
        return render(request, 'host.html', {'v1': v1,'v2': v2,'v3': v3})
     

    8、外键:

                 v = models.Host.objects.filter(nid__gt=0)
                 v[0].b.caption  ---->  通过.进行跨表
     
            外键:
                class UserType(models.Model):
                    caption = models.CharField(max_length=32)
                  id  caption
                # 1,普通用户
                # 2,VIP用户
                # 3, 游客
     
                class User(models.Model):
                    age = models.IntergerFiled()
                    name = models.CharField(max_length=10)#字符长度
                    # user_type_id = models.IntergerFiled() # 约束,
                    user_type = models.ForeignKey("UserType",to_field='id') # 约束,
     
                  name age  user_type_id     
                # 张扬  18     3
                # 张A扬 18     2
                # 张B扬 18     2
     
       9、 Ajax
     
    AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。
    不是新的编程语言,而是一种使用现有标准的新方法。
    最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。
    不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。
     
            工作原理
                   
         常用的参数:     
         var configObj = {
               method   //数据的提交方式:get和post
               url   //数据的提交路径
               async   //是否支持异步刷新,默认是true
               data    //需要提交的数据
               dataType   //服务器返回数据的类型,例如xml,String,Json等
               success    //请求成功后的回调函数
               error   //请求失败后的回调函数
            }
            实例:
            $.ajax({
                url: '/host',
                type: "POST",
                data: {'k1': 123,'k2': "root"},
                success: function(data){
                    // data是服务器端返回的字符串
                    var obj = JSON.parse(data);
                }
            })
     
            建议:永远让服务器端返回一个字典
     
            return HttpResponse(json.dumps(字典))
     
    10、多对多:
        创建多对多:
            方式一:自定义关系表
                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')
                # 10
                class Application(models.Model):
                    name = models.CharField(max_length=32)
                # 2
     
                class HostToApp(models.Model):
                    hobj = models.ForeignKey(to='Host',to_field='nid')
                    aobj = models.ForeignKey(to='Application',to_field='id')
     
                # HostToApp.objects.create(hobj_id=1,aobj_id=2)
     
            方式二:自动创建关系表
                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')
                # 10
                class Application(models.Model):
                    name = models.CharField(max_length=32)
                    r = models.ManyToManyField("Host")
     
                无法直接对第三张表进行操作
     
                obj = Application.objects.get(id=1)
                obj.name
     
                # 第三张表操作
                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()
     
     1 """s14day20 URL Configuration
     2 
     3 The `urlpatterns` list routes URLs to views. For more information please see:
     4     https://docs.djangoproject.com/en/1.10/topics/http/urls/
     5 Examples:
     6 Function views
     7     1. Add an import:  from my_app import views
     8     2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home')
     9 Class-based views
    10     1. Add an import:  from other_app.views import Home
    11     2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
    12 Including another URLconf
    13     1. Import the include() function: from django.conf.urls import url, include
    14     2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
    15 """
    16 from django.conf.urls import url
    17 from django.contrib import admin
    18 from app01 import views
    19 urlpatterns = [
    20     url(r'^admin/', admin.site.urls),
    21     url(r'^business$', views.business),
    22     url(r'^host$', views.host),
    23     url(r'^test_ajax$', views.test_ajax),
    24     url(r'^app$', views.app),
    25     url(r'^ajax_add_app$', views.ajax_add_app),
    26     # url(r'^business_add', views.business),
    27 ]
    28 
    29 url.py
    url.py
      1 <!DOCTYPE html>
      2 <html lang="en">
      3 <head>
      4     <meta charset="UTF-8">
      5     <title></title>
      6     <style>
      7         .host-tag{
      8             display: inline-block;
      9             padding: 3px;
     10             border: 1px solid red;
     11             background-color: palevioletred;
     12         }
     13         .hide{
     14             display: none;
     15         }
     16         .shade{
     17             position: fixed;
     18             top: 0;
     19             right: 0;
     20             left: 0;
     21             bottom: 0;
     22             background: black;
     23             opacity: 0.6;
     24             z-index: 100;
     25         }
     26         .add-modal,.edit-modal{
     27             position: fixed;
     28             height: 300px;
     29              400px;
     30             top:100px;
     31             left: 50%;
     32             z-index: 101;
     33             border: 1px solid red;
     34             background: white;
     35             margin-left: -200px;
     36         }
     37     </style>
     38 </head>
     39 <body>
     40 
     41     <h1>应用列表</h1>
     42      <div>
     43         <input id="add_app" type="button" value="添加" />
     44     </div>
     45     <table border="1">
     46         <thead>
     47             <tr>
     48                 <td>应用名称</td>
     49                 <td>应用主机列表</td>
     50             </tr>
     51         </thead>
     52         <tbody>
     53             {% for app in app_list %}
     54                 <tr aid="{{ app.id }}">
     55                     <td>{{ app.name }}</td>
     56                     <td>
     57                         {% for host in app.r.all %}
     58                             <span class="host-tag" hid="{{ host.nid }}"> {{ host.hostname }} </span>
     59                         {% endfor %}
     60                     </td>
     61                     <td>
     62                         <a class="edit">编辑</a>
     63                     </td>
     64                 </tr>
     65             {% endfor %}
     66         </tbody>
     67     </table>
     68 
     69 
     70 
     71     <div class="shade hide"></div>
     72     <div class="add-modal hide">
     73         <form id="add_form" method="POST" action="/app">
     74             <div class="group">
     75                 <input id="app_name" type="text" placeholder="应用名称" name="app_name" />
     76             </div>
     77             <div class="group">
     78                 <select id="host_list" name="host_list" multiple>
     79                     {% for op in host_list %}
     80                         <option value="{{ op.nid }}">{{ op.hostname }}</option>
     81                     {% endfor %}
     82                 </select>
     83             </div>
     84 
     85             <input type="submit" value="提交" />
     86             <input id="add_submit_ajax" type="button" value="Ajax提交" />
     87         </form>
     88 
     89 
     90     </div>
     91 
     92     <div class="edit-modal hide">
     93         <form id="edit_form" method="POST" action="/host">
     94                 <input type="text" name="nid" style="display:none" />
     95                 <input type="text" placeholder="应用名称" name="app" />
     96                 <select name="host_list" multiple>
     97                     {% for op in host_list %}
     98                         <option value="{{ op.nid }}">{{ op.hostname }}</option>
     99                     {% endfor %}
    100                 </select>
    101             <a id="ajax_submit_edit" >确认编辑</a>
    102         </form>
    103 
    104 
    105     </div>
    106 
    107      <script src="/static/jquery-1.12.4.js"></script>
    108     <script>
    109         $(function(){
    110 
    111             $('#add_app').click(function(){
    112                 $('.shade,.add-modal').removeClass('hide');
    113             });
    114 
    115             $('#cancel').click(function(){
    116                 $('.shade,.add-modal').addClass('hide');
    117             });
    118 
    119 
    120             $('#add_submit_ajax').click(function(){
    121                 $.ajax({
    122                     url: '/ajax_add_app',
    123                     // data: {'user': 123,'host_list': [1,2,3,4]},
    124                     data: $('#add_form').serialize(),
    125                     type: "POST",
    126                     dataType: 'JSON', // 内部
    127                     traditional: true,
    128                     success: function(obj){
    129                         console.log(obj);
    130                     },
    131                     error: function () {
    132 
    133                     }
    134 
    135                 })
    136             });
    137 
    138 
    139             $('.edit').click(function(){
    140 
    141                 $('.edit-modal,.shade').removeClass('hide');
    142 
    143                 var hid_list = [];
    144                 $(this).parent().prev().children().each(function(){
    145                     var hid = $(this).attr('hid');
    146                     hid_list.push(hid)
    147                 });
    148 
    149                 $('#edit_form').find('select').val(hid_list);
    150                 // 如果发送到后台
    151                 //
    152                 /*
    153                 obj = models.Application.objects.get(id=ai)
    154                 obj.name = "新Name"
    155                 obj.save()
    156                 obj.r.set([1,2,3,4])
    157                 */
    158 
    159 
    160             })
    161 
    162         })
    163 
    164 
    165 
    166     </script>
    167 </body>
    168 </html>
    169 
    170 app.html
    app.html
      1 from django.shortcuts import render,HttpResponse,redirect
      2 from app01 import models
      3 import json
      4 # Create your views here.
      5 
      6 def business(request):
      7     v1 = models.Business.objects.all()
      8     # QuerySet
      9     # [obj(id,caption,code),obj(id,caption,code),obj(id,caption,code) ]
     10 
     11     v2 = models.Business.objects.all().values('id','caption')
     12     # QuerySet
     13     # [{'id':1,'caption': '����'},{'id':1,'caption': '����'},...]
     14 
     15     v3 = models.Business.objects.all().values_list('id','caption')
     16     # QuerySet
     17     # [(1������),(2,����)]
     18     return render(request, 'business.html', {'v1': v1,'v2': v2, 'v3': v3})
     19 
     20 # def host(request):
     21 #     v1 = models.Host.objects.filter(nid__gt=0)
     22 #     # QuerySet [hostobj(ip.host,����һ������(..)),]
     23 #     # for row in v1:
     24 #     #     print(row.nid,row.hostname,row.ip,row.port,row.b_id,row.b.caption,row.b.code,row.b.id,sep='	')
     25 #     #     print(row.b.fk.name)
     26 #     # return HttpResponse("Host")
     27 #     v2 = models.Host.objects.filter(nid__gt=0).values('nid','hostname','b_id','b__caption')
     28 #     # QuerySet: [ {} ]
     29 #     # print(v2)
     30 #     # for row in v2:
     31 #     #     print(row['nid'],row['hostname'],row['b_id'],row['b__caption'])
     32 #
     33 #     v3 = models.Host.objects.filter(nid__gt=0).values_list('nid','hostname','b_id','b__caption')
     34 #     # QuerySet: [ {} ]
     35 #     # print(v2)
     36 #     return render(request, 'host.html', {'v1': v1,'v2': v2,'v3': v3})
     37 
     38 def host(request):
     39     if request.method == "GET":
     40         v1 = models.Host.objects.filter(nid__gt=0)
     41         v2 = models.Host.objects.filter(nid__gt=0).values('nid','hostname','b_id','b__caption')
     42         v3 = models.Host.objects.filter(nid__gt=0).values_list('nid','hostname','b_id','b__caption')
     43 
     44         b_list = models.Business.objects.all()
     45 
     46         return render(request, 'host.html', {'v1': v1,'v2': v2,'v3': v3,'b_list':b_list})
     47 
     48     elif request.method == "POST":
     49 
     50         h = request.POST.get('hostname')
     51         i = request.POST.get('ip')
     52         p = request.POST.get('port')
     53         b = request.POST.get('b_id')
     54         # models.Host.objects.create(hostname=h,
     55         #                            ip=i,
     56         #                            port=p,
     57         #                            b=models.Business.objects.get(id=b)
     58         #                            )
     59         models.Host.objects.create(hostname=h,
     60                                    ip=i,
     61                                    port=p,
     62                                    b_id=b
     63                                    )
     64         return redirect('/host')
     65 
     66 
     67 def test_ajax(request):
     68 
     69     ret = {'status': True, 'error': None, 'data': None}
     70     try:
     71         h = request.POST.get('hostname')
     72         i = request.POST.get('ip')
     73         p = request.POST.get('port')
     74         b = request.POST.get('b_id')
     75         if h and len(h) > 5:
     76             models.Host.objects.create(hostname=h,
     77                                            ip=i,
     78                                            port=p,
     79                                            b_id=b)
     80         else:
     81             ret['status'] = False
     82             ret['error'] = "太短了"
     83     except Exception as e:
     84         ret['status'] = False
     85         ret['error'] = '请求错误'
     86     return HttpResponse(json.dumps(ret))
     87 
     88 
     89 def app(request):
     90     if request.method == "GET":
     91         app_list = models.Application.objects.all()
     92         # for row in app_list:
     93         #     print(row.name,row.r.all())
     94 
     95         host_list = models.Host.objects.all()
     96         return render(request,'app.html',{"app_list": app_list,'host_list': host_list})
     97     elif request.method == "POST":
     98         app_name = request.POST.get('app_name')
     99         host_list = request.POST.getlist('host_list')
    100         print(app_name,host_list)
    101 
    102         obj = models.Application.objects.create(name=app_name)
    103         obj.r.add(*host_list)
    104 
    105         return redirect('/app')
    106 
    107 
    108 def ajax_add_app(request):
    109     ret = {'status':True, 'error':None, 'data': None}
    110 
    111     app_name = request.POST.get('app_name')
    112     host_list = request.POST.getlist('host_list')
    113     obj = models.Application.objects.create(name=app_name)
    114     obj.r.add(*host_list)
    115     return HttpResponse(json.dumps(ret))
    116 
    117 views.py
    View.py
    A wise man thinks all that he says, a fool says all that he thinks.
  • 相关阅读:
    myDOM
    13模块
    12异常
    11面向对象
    10文件操作
    蓝桥杯心得
    生物芯片-2014国赛Java语言C组四题
    奇妙的数字-2015省赛C语言A组第三题
    方程整数解-2015省赛C语言A组第一题
    机器人数目-2015决赛Java语言C组第一题
  • 原文地址:https://www.cnblogs.com/BernieChen/p/6213658.html
Copyright © 2011-2022 走看看