zoukankan      html  css  js  c++  java
  • Django框架02

    day17 2018-08-12

    Django框架02

    1. 今日内容:
    1. 新建Django项目梳理
    1. 模板文件路径配置
    2. 数据库配置
    3. 静态文件配置
    4. 注释掉csrf中间件那一行
    2. Django默认sqlite3数据库的简单用法

    3. 路由系统进阶:https://www.cnblogs.com/liwenzhou/articles/8271147.html


    - 动态路由
    urls.py中通过正则表达式的分组匹配,捕获用户访问的url中的值,传递给视图函数
    分组匹配:
    相当于给视图函数传递 位置参数
    分组命名匹配:
    相当于给视图函数传递 关键字参数

    - name
    防止将url硬编码到我们的业务逻辑代码中,给url起别名
    通过别名,反向找到 url
    在views.py中:
    from django.urls import reverse
    具体的url = reverse('url别名')

    4. 视图函数进阶:https://www.cnblogs.com/liwenzhou/articles/8305104.html
    1. views.py
    1. 基础必会三件套
    1. HttpResponse('字符串')
    2. render(request, "xx.html", {"key": value})
    3. redirect("/其它的url/")
    2. FBV(Function Base View) 基于函数的视图
    通过request.method == "POST" 去判断

    3. CBV(Class Base View) 基于类的视图
    1. 必须继承views.View --> from django import views
    2. 写一个自己的视图类
    3. 通过定义不同的方法,来处理用户不同的请求
    4. 在urls.py中注册视图的时候要写 views.类名.as_view()


    2. request对象的常用属性和方法
    request表示的是和用户请求相关的所有数据
    1. request.method --> 用户当前请求的请求方法
    2. request.GET --> 用户请求中url中的参数
    3. request.POST --> 用户POST请求的数据
    4. request.path_info --> 用户访问的url路径是什么



    3. Django上传文件
    1. 前端页面
    1. form表单一定要有action,method必须是post
    2. 一定要配置enctype="multipart/form-data
    2. 后端:
    def post(self, request):
    # 拿到用户发送的文件数据
    file_obj = request.FILES.get("code")
    # 保存下来
    # 1. 拿到用户上传的文件名
    filename = file_obj.name
    # 2. 在服务端创建一个同名的文件
    with open(filename, "wb") as f:
    # 3. 从用户上传的文件对象中一点一点读数据,往我本地创建的文件句柄里一点一点写
    for i in file_obj.chunks():
    f.write(i)
    return HttpResponse("上传成功!")

    4. JsonResponse
    专门用来返回JSON格式数据的响应对象
    from django.http import JsonResponse

    5. 模板引擎进阶:https://www.cnblogs.com/liwenzhou/p/7931828.html
    1. 已经学过的Django模板语言的语法
    1. 两个语法:
    1. {{ }} --> 跟变量相关的操作
    2. {% %} --> 跟逻辑相关的操作
    2. 变量相关
    1. 传字典或对象类型的数据 obj.name/obj.age
    2. 传数组类型的数据 obj.索引值
    3. 日期格式化
    <p>{{ today|date:"Y-m-d H:i:s"}}</p>
    4. 显示真正的html代码
    <p>{{ link|safe }}</p>
    2. 母板
    1. 为什么要用母版?
    不同的页面有大量重复的代码,我们可以把公用的部分提取出来放在单独一个文件
    2. 怎么使用?
    1. 在子页面 通过使用 {% extends ‘模板名’ %} --> 放在子页面的最上面
    2. {% block xx %}{% endblock %}
    3. 组件
    把单独的一段html代码放在一个文件
    使用 {% include '组件名' %}导入

    6. CSRF
    1. 为什么要有csrf_token?
    2. Django中如何使用?
    在render的页面上写上{% csrf_token %}
    3. 如果是form表单形式提交,必须放在form表单中


    7. ORM单表查询13条+外键操作(一对多):
    1. ORM上周知识点:
    1. 查询
    1. 查所有
    models.Publisher.objects.all()
    2. 查某个具体的记录
    models.Publisher.objects.get(id=1) --> 注意查询条件不成立就报错
    2. 删除一条记录
    models.Publisher.objects.get(id=1).delete()
    3. 创建一条记录
    models.Publisher.objects.create(name="新出版社名字", addr="出版社地址")
    4. 修改一条记录
    obj = models.Publisher.objects.get(id=1)
    obj.name = "新名字"
    obj.save()

    2. 字段和参数: https://www.cnblogs.com/liwenzhou/p/8688919.html
    1. 上周字段和参数:
    1. models.AutoField(primary_key=True)
    2. models.CharField(max_length=32)

    2. 常用字段和参数
    1. 字段
    1. CharField
    2. AutoField
    3. DateField

    4. DateTimeField()
    5. IntergeField()
    2. 参数
    1. null=True
    2. default=默认值
    3. unique=True
    4. 时间字段
    1. auto_now_add=True 第一次创建时
    2. auto_add=True 每次更新时

    3. ORM必知必会单表查询13条
    1. all() --> 查询所有结果
    2. filter() --> 根据查询条件查询数据库的
    3. get() --> 获取一个唯一的值
    4. exclude() --> 将符合条件的都剔除掉,留下不符合条件的
    5. values('字段名', ...) --> 返回一个QuerySet,里面是字典
    6. values_list(字段名', ...) --> 返回一个QuerySet,里面是元祖
    7. order_by() --> 对查询结果排序
    8. reverse() --> 对一个有序的查询结果集做反转
    9. distinct() --> 去重,跨表查询时去掉重复的记录,MySQL不支持按字段去重
    10. count() --> 返回数据条数
    11. first() --> 取第一个数据
    12. last() --> 取最后一条数据
    13. exists() --> 判断表里有没有数据


    分类:
    1. 返回QuerySet列表的有哪一些?
    1. all()
    2. filter()
    3. exclude()
    4. order_by()
    5. reverse()
    6. distinct()

    7. values('字段名', ...) --> 查询结果的列表里,都是字典
    8. values_list(字段名', ...) --> 查询结果的列表里,都是元祖

    2. 返回具体对象的
    1. first()
    2. last()
    3. get()

    3. 返回数字的
    1. count()
    4. 返回布尔值
    1. exists()

    4. 单表查询神奇的双下划线
    查询操作:https://www.cnblogs.com/liwenzhou/p/8660826.html

    1. 外键 ForeignKey
    通过Foreignkey字段 ,能够得到和我关联的那个对象
    数据库中保存的字段名是 外键字段_id
    2. 外键增删改查
    3. 跨表查询
    1. 基于对象的查询
    1. 正向查
    2. 反向查
    2. 基于QuerySet的查询
    1. 正向查
    2. 反向查


    8. cookie&session:https://www.cnblogs.com/liwenzhou/p/8343243.html
    1. Cookie
    1. 是什么?
    保存在浏览器端的键值对!
    服务端在返回响应的时候,告诉浏览器保存的键值对!浏览器可以拒绝保存Cookie.

    2. 为什么要有cookie?
    HTTP请求是无状态的,我们需要保存状态 --> cookie

    3. Django中cookie的使用
    1. 设置cookie
    rep = HttpResponse("ok")
    rep.set_cookie("key", "value", max_age=xx秒)
    rep.set_signed_cookie("key", "value", salt="ooxx", max_age=xx秒)
    2. 获取cookie
    request.COOKIES.get("key")
    request.get_signed_cookie("key", default="", salt="ooxx")
    3. cookie有失效时间
    1. Django中不设置,关闭浏览器就失效了
    2. 通过max_age设置超时时间

    4. 补充3点:
    1. 如何登陆后再跳转回之前访问的页面 --> next参数实现
    2. 如何将FBV的装饰器应用到CBV上 --> from django.utils.decorators import method_decorator
    3. 装饰器修复技术 --> from functools import wraps

     小知识点集合:

    1、连接sqlite数据库,直接把生成的文字sqlite3文件从左侧拖过来,就能看到创建的表

    2、如何在一个.py文件中,使用Django项目的相关配置或内容

     3、如果数据库里有数据了,再去修改数据库的字段,就会弹出这个框

    4、在关联表的时候,Django2.0中需要明确指定on_delete这个选项

    5、创建书籍:

     

     6、上传文件示例

    7、单表查询之神奇的双下划线

    8、判断是否是最后一次循环


    2. session
    1. 保存在服务端的键值对!
    下周讲!

    2. 练习题:
    1. django请求生命周期
    2. values和values_list的区别?
    3. session和cookie是什么?以及区别?
    4. django路由系统中name的作用?
    5. filter和exclude的区别?
    6. ORM查询示例:
    表结构:
    出版社表:
    ID 名称
    图书表:
    ID 书名称 价格 出版社ID
    题目:
    1. 查询老男孩出版社出版过的价格大于200的书籍
    2. 查询所有以py开头的书籍名称
    3. 查询价格为50,100或者150的所有书籍名称及其出版社名称
    4. 查询价格在100到200之间的所有书籍名称及其价格
    5. 查询所有人民出版社出版的书籍的价格(从高到低排序,去重)
    6. 查询价格大于200的书籍的个数
    7. 查询价格不等于100的所有书籍


    3. 作业:主机管理【02】:主机管理
    1. 基于django创建表:
    用户表:ID、用户名、密码

    业务线表:ID、名称

    主机表:ID、主机名、密码、业务线ID

    2. 主机管理:增删改查(一对多,不需要做业务线管理,只要在数据库录入业务线数据即可)

    3. 使用母板和动态路由
    4. 套用BootStrap样式

    采分点:
    练习题:20
    实现所有功能:70
    代码写的清晰、健壮、可扩展:10

  • 相关阅读:
    IIS代理
    NODEJS
    js图表插件
    注册nodejs程序为windows服务
    中断子系统7_中断出口处理
    Leetcode: Sort List
    jquery 鼠标经过放大图片
    在Tomcat上运行ADF Essentials应用
    简谈HTML5与APP技术应用
    Boost的Serialization和SmartPoint搭配使用
  • 原文地址:https://www.cnblogs.com/lucky-penguin/p/9466170.html
Copyright © 2011-2022 走看看