(提问复习为主)
一、Django请求的生命周期
     武彦涛:
          路由系统 -> 视图函数(获取模板+数据=》渲染) -> 字符串返回给用户
 
 
二、路由系统
     王腾:
          /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" %}
 
 
三、视图
     陈一波:
     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(字符串)
 
 
四、模板语言
     冯国富:
     申阳
     程表
     高晓峰
          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>
 
五、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='qiangxiaohu',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)
 
               v1 = models.Business.objects.all()
               # QuerySet ,内部元素都是对象
               # QuerySet ,内部元素都是字典
               v2 = models.Business.objects.all().values('id','caption')
               # QuerySet ,内部元素都是元组
               v3 = models.Business.objects.all().values_list('id','caption')
 
               # 获取到的一个对象,如果不存在就报错
               models.Business.objects.get(id=1)
               对象或者None = models.Business.objects.filter(id=1).first()
 
 
               外键:
                    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
 
张扬:
     position:fixed absolute relative
 
 
六、Ajax
 
          $.ajax({
               url: '/host',
               type: "POST",
               data: {'k1': 123,'k2': "root"},
               success: function(data){
                    // data是服务器端返回的字符串
                    var obj = JSON.parse(data);
               }
          })
 
 
          建议:永远让服务器端返回一个字典
 
          return HttpResponse(json.dumps(字典))
 
 
七、ORM多对多:
    创建多对多:
          方式一:自定义关系表
               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()
 
 
 

Python的平凡之路(20)的更多相关文章

  1. Python的平凡之路(8)

    (本文是对平凡之路(7)的补充等) 一.动态导入模块 import importlib __import__('import_lib.metaclass') #这是解释器自己内部用的 #importl ...

  2. Python的平凡之路(16)

    一.HTML+CSS补充 0.常用页面布局 <!DOCTYPE html> <html lang="en"><head> <meta ch ...

  3. Python的平凡之路(13)

    一.Python的paramiko模块介绍 Python 的paramiko模块,该模块和SSH用于连接远程服务器并执行相关操作 SSH client 用于连接远程服务器并执行基本命令 基于用户名和密 ...

  4. Python的平凡之路(11)

    一. rabbitmq 1 进程Queue:  父进程与子进程进行交互,或者同属于同一父进程下多个子进程进行交互 2 队列通信:   send1.py #!/usr/bin/env python#Au ...

  5. Python的平凡之路(9)

    一.Paramiko模块练习 1. Paramiko模块介绍 Paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接   2 .SSHclie ...

  6. Python的平凡之路(2)

    一.标准库(sys & os):   Python 的标准库(standard library) 是随着 Python 一起安装在你的电脑中的,是 Python 的一部分 (当然也有特殊情况. ...

  7. Python的平凡之路(19)

    一.Django请求生命周期   对于所有的web框架来说本质就是一个socket服务端,浏览器是socket客户端                                          ...

  8. Python的平凡之路(18)

    一.JS 正则部分 test   - 判断字符串是否符合规定的正则rep = /\d+/;rep.test("asdfoiklfasdf89asdfasdf")# truerep ...

  9. Python的平凡之路(15)

    一.CSS补充: 1. 上节课讲述 a.css重用               <style>            如果整个页面的宽度 > 900px时:            { ...

随机推荐

  1. SAP采购订单历史明细报表源代码(自己收藏)

    SPAN { font-family: "Courier New"; font-size: 10pt; color: #000000; background: #FFFFFF } ...

  2. Can't connect to local MySQL server through socket '/tmp/mysql.sock'

    找不到/tmp/mysql.sock这个文件,需要查找/tmp/mysql.sock文件位置,并在/etc/my.cnf里面配置 [client]socket=/var/lib/mysql/mysql ...

  3. 微信webview

    会露出灰色的地步 https://segmentfault.com/q/1010000004295291 有说用iscroll5来解决,但是明显有bug啊 https://segmentfault.c ...

  4. 我需要在Web上完成一个图片上传的功能

    我需要在Web上完成一个图片上传的功能. 这个页面需要能从手机中选择图片上传. 首先,这个页面是从微信上面触发的,所以修改了微信的的入口地址,增加了身份识别号作为传参. 跳转到页面的时候,页面先检查身 ...

  5. 使用Axis2建立WebService

    Axis是apache重量级的WebService框架,虽然相比Xfire和CXF而言相对比较臃肿,但是企业中最常用的就是Axis,Axis2是Axis的升级版:   建立一个最简单的Axis2  W ...

  6. JavaScript引擎LHS查找和RHS查找

    要想真正理解Javascript脚本中每一句代码的执行过程,需要弄清楚几个基本概念:1.引擎,从头到尾负责整个 JavaScript 程序的编译及执行过程.2.编译器,引擎的好朋友之一,负责语法分析及 ...

  7. vbscript input select 添加个option根据value值到指定位置--相当于排序

    '添加option到指定位置(按value排序) dim valindex valindex=-1 for i=0 to selcom.length-1 if selcom.Options(i).va ...

  8. jquery中隐藏div的几种方法

    //jQuery中的显示.隐藏方法 $("#id").show()://表示display:block,    $("#id").hide()://表示disp ...

  9. checkbox的check事件

    <input type="checkbox" id="NameFlag" name="originalName" onClick=&q ...

  10. Android开发--Adapter的应用

    1.简介 Adapter的作用是为GridView,ListView等界面控件与数据之间搭建桥梁,每当列表里的每一项显示到页面时,都会调用到Adapter的getView方法 返回一个View.在An ...