Django历史
Django 是由美国的一个 Web 开发团队编写。它诞生于 2003 年秋天,那时
Web团队负责制作和维护本地的几个新闻网站,那些网站(包括 LJWorld.com、Lawrence.com 和 KUsports.com)不断要求增加功能,而且整个应用要在紧张的周期内快速开发出来,通常只有几天或几小时。因此,只能开发一个节省时间的 Web 开发框架,这样他们才能在极短的截止日期之前构建出易于维护的应用。经过一段时间的开发后,那个框架已经足够驱动世界上最大的在线网站了。2005 年夏天,团队决定把框架作为开源软件发布出来。他们在 2005 年 7 月发布了那个框架,将其命名为 Django。
Django是一个开放源代码的Web应用框架,由Python写成。功能比较齐全。现在市场份额50%左右,其他Web框架还有Flask,Tornado。
1、优点
(1)重量级的框架,提供了丰富的功能组件,让开发变得简单,便捷。
(2)完善的开发文档,提供给了开发人员很好的解决方案。
(3)开发效率快。
2、缺点
(1)开发不够灵活,不够自由,不能够完成高度定制化的开发。
(2)执行速度慢。
Django的官网:https://docs.djangoproject.com/en/2.2/
1、django版本号
统一使用2.2.1 版本。
2、为什么使用这个版本?
①不使用最新的版本(不稳定)
②选择使用稳定的版本
③LTS 长版本支持
3、Django安装
(1)anaconda虚拟环境操作
conda -V : 查看anaconda 版本
创建虚拟环境
conda create -n 虚拟环境的名字 python=版本号
激活虚拟环境:activate 虚拟环境的名字
退出虚拟环境 :deactivate
查看有哪些虚拟环境:conda env list
(2)安装Django
创建虚拟环境 conda create -n DjangoPath python=3.7
激活虚拟环境 activate DjangoPath
安装Django pip install django==2.2.1
使用国内源)pip install django==2.2.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
创建项目
1、创建过程
(1)首先创建一个目录
(2)进入目录,打开终端(命令行)
(3)激活虚拟环境 activate DjangoPath
(4)创建工程 django-admin startproject Demo(工程名字)
2、Django项目的启动
(1)进入Django项目 manage.py 同级目录
(2)激活虚拟环境
(3)启动项目
①、python manage.py runserver
②、python manage.py runserver 9000 修改端口
③、python manage.py runserver 0.0.0.0:9000 所有同一个局域网中的用户都能访问
0.0.0.0 代表本机的所有ip地址,如果一个服务有多个IP地址(192.168.1.2和10.1.1.12),那么我们如果设置的监听地址是0.0.0.0那么我们无论是通过IP 192.168.1.2还是10.1.1.12 都是可以访问该服务的。
127.0.0.1是回环地址,当我们在服务器搭建了一个Web服务器的时候如果我们监听的端口时127.0.0.1:端口号 的 时候,那么这个Web服务器只可以在服务器本地访问了,在别的地方进行访问是不行的。
前提:
a.将settings.py中的ALLOWED_HOSTS = [‘‘] 添加 “”
b.在同一个局域网中
3、django原理
1、127.0.0.1:8000找到服务器
2、请求的路由是/laowang/
3、在django代码中找到ROOT_URLCONF,找到总路由urls.py
4、在urls.py逐个匹配,匹配成功后找到视图函数
5、显示视图函数的响应内容
django路由
基本格式:
path(“字符串”,要执行任务的视图)
re_path(“正则表达式”,要执行任务的视图)
正则: 是一种字符串的处理方式,用于字符串匹配的
字符串的匹配分为两种:
1、内容匹配:
例如:Python中的re模块,JS中的匹配
通过要匹配的内容的类型,长度进行匹配的
2、结构匹配:
xpath 获取到内容的某个标签进行匹配
通过获取内容在这个文档中的结构,进行匹配
字符 | 描述 |
---|---|
^ | 匹配输入字符串的开始位置 |
$ | 匹配输入字符串的结尾位置 |
. | 匹配除换行符 \n 之外的任何单字符 |
\d | 匹配一个数字字符。等价于 [0-9] |
\D | 匹配一个非数字字符。等价于 [ ^0-9 ] |
\w | 匹配包括下划线的任何单词字符。等价于‘[A-Za-z0-9_] |
\W | 匹配任何非单词字符。等价于 [ ^A-Za-z0-9_ ] |
[xyz] | 字符集合 匹配所包含的任意一个字符。例如, ‘[abc]‘ 可以匹配 "plain" 中的 ‘a‘ |
() | 标记一个子表达式的开始和结束位置 子表达式可以获取供以后使用 |
| | 指明两项之间的一个选择 |
* | 匹配前面的子表达式零次或多次 |
+ | 匹配前面的子表达式一次或多次 |
? | 匹配前面的子表达式零次或一次 |
{n} | n 是一个非负整数。匹配确定的 n 次。例如,‘o{2}‘ 不能匹配 "Bob" 中的 ‘o‘,但是能匹配 "food" 中的两个 o。 |
re_path(r‘^\w/$‘, views.zf) # \w 匹配任意一个字母数字下划线
re_path(r‘^\w+/$‘, views.zf) # + 表示匹配前面的表达式一次或者多次 例如 fengtai
re_path(r‘^\d/$‘, views.blog) , # \d 匹配任意数字
re_path(r‘^\d{4}/$‘, views.blog) # {4}固定位数
分组匹配
作用:通过分组匹配将url路径部分内容,传递到视图函数中
格式:通过()方式, 将匹配到的内容传递给视图函数的形参
分组命名匹配
作用:和分组匹配作用相同,但是更加直观。
格式:(?P<名称>正则表达式)
模板加载
1、认识BASE_DIR(项目根目录)
2、在setting.py中的TEMPLATES 加上 ‘DIRS‘:[os.path.join(BASE_DIR,"templates")]
3、创建templates目录
在项目路径下创建一个文件夹一般叫templates,与manage.py同路径下
模板语法
Django自带模板渲染的规则,分为三种。变量、标签、过滤器。
1、变量
语法: {{ 变量名 }}
支持类型: 字符串,整形,列表,字典,元祖
变量是字典类型,可以以键取值
(2)变量是有序的序列类型,变量可以通过索引进行取值
(3)变量是对象,可以调用没有参数的方法
locals() 会将所有的局部变量作为字典返回
2、标签
语法: {% %} 。具有某种语法的逻辑
(1)if结构的使用
{% if age > 18 %}
已经成年
{% elif age == 18 %}
正好成年
{% else %}
未成年
{% endif %}
(2)ifequal 的使用
{% ifequal age 18 %}
18岁真好
{% else %}
不等于18
{% endifequal %}
(3)for循环
forloop 是一个Django模板提供的一个变量,用于记录循环的次数,常和if在一起使用
<table width="400px" border="1">
<tr>
<td>编号</td>
<td>用户名</td>
<td>年龄</td>
</tr>
{% for person in person_list %}
<tr>
<td>{{ person.id }}</td>
<td>{{ person.name }}</td>
<td>{{ person.age }}</td>
{% endfor %}
</tr>
</table>
(4)for ... empty 循环
如果变量名不存在或者内容为空的时候显示{%empty%}中的内容,否则不执行
(5)autoescape
DTL模板中默认已经开启了自动转义,会将那些特殊字符串进行转义,比如会将“<”转义成<会将“>”转移成“>”,使用DTL的自动转义,可以使网站不容易出现XSS漏洞。
如果变量是可信任的,那么可以使用“autoescape”标签来关掉 自动转义
{% autoescape on%}
{{ msg }}
{% endautoescape %}
<hr>
{% autoescape off%}
{{ msg }}
{% endautoescape %}
过滤器
3、过滤器
作用:将视图传的值进行二次处理
语法: {{ name | 过滤器方法:传值}}
| 过滤器,将左边语句的值,作为参数传递到后面的语句
过滤器的方法即 Python定义的方法
Django提供了很多过滤器的方法,但是为了完成特定的操作内容,需要自定义过滤器
过滤器 | 作用 | 用法 |
---|---|---|
upper | 大写 | {{ user_name | upper }} |
lower | 小写 | {{ user_name | lower }} |
safe | 执行原本代码 | {{ js | safe }} |
safe过滤器: Django出于安全的角度考虑,会将视图传递的JS或者HTML的内容进行转义,使用safe将指定的内容转为安全的,执行本来的含义
静态文件处理
静态文件:img,js,css
方式一:
1、创建static目录
2、配置:在setting.py加上
# 静态文件路由url
STATIC_URL = ‘/static/‘
# 静态文件位置
STATICFILES_DIRS = [
os.path.join(BASE_DIR,"static")
]
# 图片路径
<img src="/static/img/a8e2bb2ffe19cdf090fa586ae4462ee3.jpg" alt="">
方式二:
在html头部写上{% load static %}
{% load static %}
<img src="{% static ‘img/toudianping.jpg‘ %}" alt="toudianping.jpg">
模板继承和包含
1、继承
当我们浏览一个网站的时候发现里面的网页大部分都是相同的。这时候我们为了去除代码的冗余,可以使用继承
(1)、定义父模板,在父模板中使用block
(2)、定义子模板,继承父模板
2、包含
可以将常用的页面内容如导航条,页尾信息等不变的组件可以保存在单独的文件中,然后在需要使用的地方按如下语法导入即可。
{% include ‘navbar.html‘ %}
原文:https://www.cnblogs.com/markshui/p/13154579.html