zoukankan      html  css  js  c++  java
  • python第一百零七天-- Django 基础 2

    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': 'xxx','age': 73}})
    redirect("URL")
    HttpResponse(字符串)


    4、模板语言
    render(request, "模板的文件的路径", {'obj': 1234, 'k1': [1,2,3,4],"k2": {'name': 'ssss','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 %} #keys 通过字典键  取值
             {{ row }}
             {{forloop.counter}}#从1开始计数
             {{forloop.counter0}}#从0开始计数
             {{forloop.revcounter }}#从1开始计数倒降序
             {{forloop.revcounter0 }}#从0开始计数倒降序
             {{forloop.first}}#是否第一个循环
             {{forloop.last}}#是否最后一个循环
             {{forloop.parentloop}}#父级的循环计数
          {% 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)
             
             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 ----> 通过.进行跨表

    filter(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     
             # 用户1  18     3  #表示用户1 为游客
             # 用户2  18     2 #表示用户2 为VIP用户
             # 用户3  18     2

    窗口相对定位 开启相对定位 使用父级相对定位 单用 开始显示绝对定位
    position: fixed relative absolute




    Ajax

    $.ajax({
    url: '/host',
    type: "POST",
    data: {'k1': 123,'k2': "root"},
    success: function(data){
    // data是服务器端返回的字符串
    var obj = JSON.parse(data);
    }
    })
    $.get(url='xx',data='xxx')
    $.getJson
    $.post


    建议:永远让服务器端返回一个字典

    return HttpResponse(json.dumps(字典))




    多对多:
    创建多对多:
    方式一:自定义关系表
             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() #获取当前对象 的所有对应关系



  • 相关阅读:
    touch创建文件
    excel如何冻结首行或首列及首行首列同时冻结
    cd mkdir mv cp rm 命令目录相关操作
    months_between()用法
    sysdate()简单用法
    round()和trunc()用法
    length() 用法
    replace 用法
    orcl 中upper()和lower()和initcap()的用法
    orcl 复杂查询
  • 原文地址:https://www.cnblogs.com/uge3/p/7397096.html
Copyright © 2011-2022 走看看