• 视图与网址进阶

    • 这里学到了正则表达式的解释

      url(r'^add/(\d+)/(\d+)/$', calc_views.add2, name='add2'),

      用括号括起来的意思是保存为一个子组,每一个子组将作为一个参数,被 views.py 中的对应视图函数接收。

  • 模板

    • 模板是可以继承的:以一个HTML文件为基础,拓展出其他的HTML模板

  • 模板进阶

    • 模板HTML上接收到一个参数是这么表示的

      {{ string }}

      用两层花括号括起来

    • 循环

      • HTML上可以写循环

        教程列表:
        {% for i in TutorialList %}
        {{ i }}
        {% endfor %}#注意TutorialList = ["HTML", "CSS", "jQuery", "Python", "Django"]
      • 循环上加逗号

        {% for item in List %}{{ item }},
        {% endfor %}

        这样最后会多一个逗号

      • 判断一下是不是最后一个就解决了

        {% for item in List %}{{ item }}{% if not forloop.last %},{% endif %}
        {% endfor %}
      • 循环中好用的东西

        
        变量                   描述
        forloop.counter        索引从 1 开始算
        forloop.counter0       索引从 0 开始算
        forloop.revcounter     索引从最大长度到 1
        forloop.revcounter0    索引从最大长度到 0
        forloop.first          当遍历的元素为第一项时为真
        forloop.last           当遍历的元素为最后一项时为真
        forloop.parentloop     用在嵌套的 for 循环中,获取上一层 for 循环的 forloop
      • <ul>
        {% for athlete in athlete_list %}<li>{{ athlete.name }}</li>
        {% empty %}<li>抱歉,列表为空</li>
        {% endfor %}
        </ul>

        判断列表为空

    • 字典

      • 可以显示字典中的内容

        站点:{{ info_dict.site }} 内容:{{ info_dict.content }}#这里字典是info_dict = {'site': u'自强学堂', 'content': u'各种IT技术教程'}

        在模板中取字典的键是用点info_dict.site,而不是Python中的 info_dict['site']

      • 字典遍历

        {% for key, value in info_dict.items %}{{ key }}: {{ value }}
        {% endfor %}

        其实就是遍历这样一个 List:  [('site', u'自强学堂'), ('content', u'各种IT技术教程')]

    • if操作

      {% if var >= 90 %}
      成绩优秀,自强学堂你没少去吧!学得不错
      {% elif var >= 80 %}
      成绩良好
      {% elif var >= 70 %}
      成绩一般
      {% elif var >= 60 %}
      需要努力
      {% else %}
      不及格啊,大哥!多去自强学堂学习啊!
      {% endif %}

      注意:比较符号前后必须有至少一个空格!

    • 可以获取当前用户、网址、GET参数

  • 模型

  • QuerySet API:就是数据库接口,用来操作数据库,包括

    • 创建对象,也就是在数据库中添加记录

    • 获取对象,就是数据库里的查找

    • 删除符合条件的结果

    • 更新某个内容

    • 可迭代

    • QuerySet 是可以用pickle序列化到硬盘再读取出来的

    • 查询结果排序:不就是数据库的排序

    • 支持链式查询

    • 不支持负索引

    • 重复的问题,使用 .distinct() 去重

  • QuerySet 进阶

  • 自定义Field

    • Django 的官方提供了很多的 Field,但是有时候还是不能满足我们的需求,不过Django提供了自定义 Field 的方法

  • 数据表更改

    • 修改了models.py后运行

      python manage.py makemigrations
      python manage.py migrate

      这两行命令就会对我们的models.py 进行检测,自动发现需要更改的,应用到数据库中去。

  • 后台

    • admin.py中还有其它一些常用的功能

      • 后台已经基本上做出来了,可是如果我们还需要显示一些其它的fields

        class ArticleAdmin(admin.ModelAdmin):list_display = ('title','pub_date','update_time',)
      • 搜索功能:search_fields = ('title', 'content',) 这样就可以按照 标题或内容搜索了

      • 筛选功能:list_filter = ('status',) 这样就可以根据文章的状态去筛选,比如找出是草稿的文章

    • 举了一些例子

  • 表单

    • 使用 Django 的 表单 (forms)

  • 配置

    • ​​​​​​​settings.py 文件中有以下语句:

      import os
      BASE_DIR = os.path.dirname(os.path.dirname(__file__))

      这里用到了python中一个神奇的变量 __file__ 这个变量可以获取到当前文件(包含这个代码的文件)的路径。os.path.dirname(__file__) 得到文件所在目录,再来一个os.path.dirname()就是目录的上一级,BASE_DIR 即为 项目 所在目录

    • DEBUG=True 时,如果出现 bug 便于我们看见问题所在,但是部署时最好不要让用户看见bug的详情,可能一些不怀好心的人攻击网站,造成不必要的麻烦。

    • ALLOWED_HOSTS

    • static 是静态文件所有目录,比如 jquery.js, bootstrap.min.css 等文件

  • 静态文件

    • 静态文件是指 网站中的 js, css, 图片,视频等文件

    • 部署:

      • 1. 收集静态文件

        python manage.py collectstatic

        把以前放在app下static中的静态文件全部拷贝到 settings.py 中设置的 STATIC_ROOT 文件夹中

      • 2. 用 apache2 或 nginx 示例代码

  • 部署apache

    • 安装 apache2 和 mod_wsgi

    • 确认安装的apache2版本号

    • 准备一个新网站

    • 修改wsgi.py文件

    • 设置目录和文件权限

    • 激活新网站

    • 错误排查

  • 发送邮件

    • 比如有人提交了应聘的表单,可以向HR的邮箱发邮件,这样,HR不看网站就可以知道有人在网站上提交了应聘信息。

  • 数据导入

    • 从网上下载的一些数据,excel表格,xml文件,txt文件等有时候我们想把它导入数据库

    • 写个py脚本就可以导入了

  • 数据迁移

    • 数据库的迁移方法,包含不同数据库,如 SQLite3, MySQL, PostgreSQL 之间数据迁移方案,以及数据在不同机器上迁移方案

    • 简单的数据导出与导入

      • django 项目提供了一个导出的方法 python manage.py dumpdata
      • 数据导入,不需要指定 appname
      • 可以兼容各种支持的数据库,也就是说,以前用的是 SQLite3,可以导出后,用这种方法导入到 MySQL, PostgreSQL等数据库,反过来也可以。
    • 数据库的迁移

      • 用数据库自带的导出导入命令

  • 多数据库联用

    • 在一个 django project 中使用多个数据库的方法, 多个数据库的联用 以及多数据库时数据导入导出的方法

  • 用户注册系统

  • 缓存系统

    • Django 是动态网站,一般来说需要实时地生成访问的网页,展示给访问者,这样,内容可以随时变化,但是从数据库读多次把所需要的数据取出来,要比从内存或者硬盘等一次读出来 付出的成本大很多

    • 缓存系统工作原理:对于给定的网址,尝试从缓存中找到网址,如果页面在缓存中,直接返回缓存的页面,如果缓存中没有,一系列操作(比如查数据库)后,保存生成的页面内容到缓存系统以供下一次使用,然后返回生成的页面内容

      • Django settings 中 cache 默认为利用本地的内存来当缓存,速度很快。当然可能出来内存不够用的情况

      • 在 github 上也有用 redis 做 Django的缓存系统的

      • 利用文件系统来缓存

      • 利用数据库来缓存,利用命令创建相应的表:python manage.py createcachetable cache_table_name

  • 生成静态页面

    • 如果网站的流量过大,每次访问时都动态生成,执行SQL语句,消耗大量服务器资源,这时候可以考虑生成静态页面

  • 安全

  • 国际化

  • session

    • Django完全支持也匿名会话,简单说就是使用跨网页之间可以进行通讯,比如显示用户名,用户是否已经发表评论。session框架让你存储和获取访问者的数据信息,这些信息保存在服务器上(默认是数据库中),以 cookies 的方式发送和获取一个包含 session ID的值,并不是用cookies传递数据本身

    • 我理解的话就是自动保存用户名密码的那套机制

    • 启用session

    • 在视图中使用 session

      • request.session 可以在视图中任何地方使用,它类似于python中的字典

      • session 默认有效时间为两周,可以在 settings.py 中修改默认值

    • 例子

      • 比如写一个不让用户评论两次的应用:

        from django.http import HttpResponsedef post_comment(request, new_comment):if request.session.get('has_commented', False):return HttpResponse("You've already commented.")c = comments.Comment(comment=new_comment)c.save()request.session['has_commented'] = Truereturn HttpResponse('Thanks for your comment!')
      • 一个简化的登陆认证:

        def login(request):m = Member.objects.get(username=request.POST['username'])if m.password == request.POST['password']:request.session['member_id'] = m.idreturn HttpResponse("You're logged in.")else:return HttpResponse("Your username and password didn't match.")def logout(request):try:del request.session['member_id']except KeyError:passreturn HttpResponse("You're logged out.")

        当登陆时验证用户名和密码,并保存用户id在 session 中,这样就可以在视图中用 request.session['member_id']来检查用户是否登陆,当退出的时候,删除掉它。

  • 传递数据给JS

  • Ajax

    • 有时候我们需要在不刷新的情况下载入一些内容,在网页的基本知识中我们介绍了 ajax 技术

  • Ajax CSRF 认证

  • Sitemap 站点地图

  • ORM

    • 可以用 Django QuerySet API 来创建,查询,删除,修改,不用写SQL语句。

  • 通用视图

    • 做一个博客,我们需要做一个文章列表,文章详情页,这种需求是比较普遍的,所以Django中提供了Class-Based Views

  • 上下文渲染器

    • 有时候我们想让一些内容在多个模板中都要有,比如导航内容,我们又不想每个视图函数都写一次这些变量内容,怎么办呢?这时候就可以用 Django 上下文渲染器来解决

  • 中间件

    • 我们从浏览器发出一个请求 Request,得到一个响应后的内容 HttpResponse,每一个请求都是先通过中间件中的 process_request 函数,这个函数返回 None 或者 HttpResponse 对象,如果返回前者,继续处理其它中间件,如果返回一个 HttpResponse,就处理中止,返回到网页上

      • 比如我们要做一个 拦截器,发现有恶意访问网站的人,就拦截他!

  • 微信接口

  • 单元测试

    • Django中有完善的单元测试,我们可以对开发的每一个功能进行单元测试,这样只要运行一个命令 python manage.py test,就可以测试功能是否正常。一言以蔽之,测试就是检查代码是否按照自己的预期那样运行。

  • 做minicms学到的

    • django.shortcuts.redirect 位置​​​​​​​

自强学堂django学习笔记相关推荐

  1. django 学习笔记

    django 学习笔记 启动虚拟机: workon bj18_py3 创建一个项目: django-admin.py startproject mysite 启动开发用服务器:从外层项目 mysite ...

  2. 分享:Django学习笔记(4)---ManyToMany 添加、删除关联、查询

    Django学习笔记(4)---ManyToMany 添加.删除关联.查询 http://my.oschina.net/u/572994/blog/105280

  3. django学习笔记03

    原创博客地址:django学习笔记03 第一章,模型层 查询集API 一.QuerySet何时被提交 迭代 QuerySet是可迭代的,在首次迭代查询集时执行实际的数据库查询 切片:如果使用切片的&q ...

  4. django学习笔记02

    原创博客地址:django学习笔记02 第一章:模型层 1.8 查询操作 一.创建对象 1 2 3 4 5 >>> from blog.models import Blog > ...

  5. django学习笔记01

    原创博客地址:django学习笔记01 基于教程,刘江的博客教程Django教程:https://www.liujiangblog.com/course/django/87 第一章:模型层 1.1 模 ...

  6. Django学习笔记---第一天

    Django学习笔记 1.Django的安装 //如果不指定版本号,默认安装最新版 pip3 install django==1.11.8 关于Django的版本和python的版本依赖关系,请看下图 ...

  7. 千锋Django学习笔记

    千锋Django学习笔记 文章目录 千锋Django学习笔记 写在前面 1. MVC和MTV 2. Django简介 3. MTV简单流程 4. 和Model的简单对接 5. Model 6. Tem ...

  8. Django学习笔记(五)

    Django学习笔记(五) MVC和MTV对比 传统的MVC(Model-View-Controller) M 模型层,主要是对数据库层的封装 V 视图层,向用户展示结果 C 控制层,用于请求,获取数 ...

  9. 尚学堂Java学习笔记

    尚学堂Java学习笔记 ============================ J2SDK&JRE J2SDK:JAVA2 SOFTWARE DEVELOPMENT KIT JRE:JAVA ...

最新文章

  1. 经典算法书籍推荐以及算法书排行【算法四库全书】
  2. 学习完Ajax的总结
  3. pc站转手机站的首页(扫二维码)
  4. linux启动phpstudy,phpstudy启动不了解决方法
  5. 【转】C#格式化字符串
  6. 乐鑫代理启明云端分享|ESP32驱动1.54inch(240*240)彩屏
  7. 《Power Designer系统分析与建模实战》——2.1 需求模型简介
  8. 【Linux】Linux的常用远程工具
  9. 如果你负债累累,上班已经不能还账,又没有创业资金,该怎么办?
  10. 公众号抢号_公众号调性是什么意思?公众号排版可以塑造公众号调性吗?
  11. python儿童入门视频-老男孩Python视频教程全套完整版!无偿分享~
  12. 一笔四线连9点你可以吗
  13. linux中bash命令是什么,linux中bash是什么意思?
  14. icon 的css,【iview】icon样式
  15. 【参会指南】PPP全球数字资产投资峰会之金融科技区块链支持可持续发展
  16. android widget的中文文档
  17. 我最近在看什么——《蛤蟆先生去看心理医生》
  18. java限流器简单实现
  19. java购物车的实现并发控制_购物车的实现原理
  20. 如何在IDEA中创建web项目并且部署到Tomcat中

热门文章

  1. python出现‘int‘ object is not iterable的解决办法
  2. CSDN博客首行空两格
  3. Audition CC Mac(ancc2019直装版)
  4. 核密度函数详解,核密度函数图如何看?
  5. 因数个数函数与因数和函数
  6. GKCTF 2021]excel 骚操作
  7. DisplayPort--Link training之Clock Recovery (CR)
  8. 【风控模型方法论】利用系数符号、VIF和IV快速挑选模型变量
  9. 【采用】互联网金融反欺诈体系构建及典型应用案例
  10. Android -- MediaRecorder录制短视频