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() #获取当前对象 的所有对应关系
				
时间: 2024-10-11 09:19:19

python第一百零七天-- Django 基础 2的相关文章

python第一百零五天 ---Django 基础

一 路由系统 URL 1 url(r'^index/',views.index) url(r'^home/', views.Home.as_view()) 2 url(r'^detail-(\d+).html',views.detail),#动态路由 views.py def detail(request,nid) url(r'^detail-(\d+)_(\d+).html',views.detail),#动态路由 def detail(request,nid,uid) 3 url(r'^de

“全栈2019”Java第一百零七章:匿名内部类与构造方法注意事项

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第一百零七章:匿名内部类与构造方法注意事项 下一章 "全栈2019"Java第一百零八章:匿名内部类与final关键字 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"

python第一百零九天---Django 4

session :1. Session 基于Cookie做用户验证时:敏感信息不适合放在cookie中 a. Session原理 Cookie是保存在用户浏览器端的键值对 Session是保存在服务器端的键值对: 保存在数据库 使用session 前需要 执行 --Python manage.py makemigrations --python manage.py migrate 保存在内存中的形式: '随机字符串':{ 'username': '....', 'loging': '....',

小刘同学的第一百零七篇博文

现在是敲代码的时间严重不足,毕竟考试的时间就快到了,虽说复习的状态也不是很好,但是也尽量分配多点时间复习. 今天把昨天没实现的删除好友功能实现了. 不过好像报了个小错,不知道为什么-- 老师本来说是不想用sequelize的方法来写删除的,结果最后还是用了,大概的意思就是userId下的所有friendId删除, 然后friendId下的所有userId也删除,完成所有好友关系的删除. 前端页面,删除数据后,实时刷新页面. 还有一个上次课老师没有做完的,添加过滤当前用户的功能,就是说用户不能添加

“全栈2019”Java第一百零六章:匿名内部类与抽象类接口注意事项

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第一百零六章:匿名内部类与抽象类接口注意事项 下一章 "全栈2019"Java第一百零七章:匿名内部类与构造方法注意事项 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复&quo

“全栈2019”Java第一百零二章:哪些作用域可以声明局部内部类?

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第一百零二章:哪些作用域可以声明局部内部类? 下一章 "全栈2019"Java第一百零三章:匿名内部类详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学

“全栈2019”Java第一百零四章:匿名内部类与外部成员互访详解

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第一百零四章:匿名内部类与外部成员互访详解 下一章 "全栈2019"Java第一百零五章:匿名内部类覆盖作用域成员详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"

“全栈2019”Java第一百零五章:匿名内部类覆盖作用域成员详解

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第一百零五章:匿名内部类覆盖作用域成员详解 下一章 "全栈2019"Java第一百零六章:匿名内部类与抽象类接口注意事项 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复&quo

python第一百三十天 ---简单的BBS论坛

简单的BBS论坛 实现功能 git仓库地址:https://github.com/uge3/BBS 1.整体参考"抽屉新热榜" + "博客园" 2.实现不同论坛版块 3.帖子列表展示 4.个人博客主页 5.个人博客标签.分类.时间 筛选 6.帖子评论数.点赞数展示 7.允许登录用户发贴.评论.点赞 8.允许上传文件(个人头像) 9.可进行多级评论 10.个人博客后台管理(创建\编辑\删除文章,个人分类\个人标签管理,可以选择个人博客主题,) 11, 通过admin模