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.
原文地址:https://www.cnblogs.com/BernieChen/p/6213658.html