Django简介
Django是一个高级Python Web框架, 鼓励快速,简洁, 以程序设计的思想进行开发. 通过使用这个框架, 可以减少很多开发麻烦, 使你更专注于编写自己的app, 而不需要重复造轮子. Django免费并且开源.
Django特点
完全免费并开源源代码
快速高效开发
使用MTV架构(熟悉Web开发的应该会说是MVC架构)
强大的可扩展性.
用户在浏览器中输入URL后的回车, 浏览器会对URL进行检查, 首先判断协议,如果是http就按照 Web 来处理, 然互调用DNS查询, 将域名转换为IP地址, 然后经过网络传输到达对应Web服务器, 服务器对url进行解析后, 调用View中的逻辑(MTV中的V), 其中又涉及到Model(MTV中的M), 与数据库的进行交互, 将数据发到Template(MTV中的T)进行渲染, 然后发送到浏览器中, 浏览器以合适的方式呈现给用户。
MVC设计模式
模型-视图-控制器(MVC):MVC 是一种软件开发的方法,它把代码的定义和数据访问的方法(模型)与请求逻辑 (控制器)还有用户接口(视图)分开来。
这种设计模式关键的优势在于各种组件都是 松散结合 的。这样,每个由 Django驱动 的Web应用都有着明确的目的,并且可独立更改而不影响到其它的部分。 比如,开发者 更改一个应用程序中的 URL 而不用影响到这个程序底层的实现。 设计师可以改变 HTML 页面 的样式而不用接触 Python 代码。 数据库管理员可以重新命名数据表并且只需更改一个地方,无需从一大堆文件中进行查找和替换。
实例;4个Python的文件:
models.py
文件主要用一个 Python 类来描述数据表。 称为模型(model) 。 运用这个类,你可以通过简单的 Python 的代码来创建、检索、更新、删除 数据库中的记录而无需写一条又一条的SQL语句。views.py
文件包含了页面的业务逻辑。 下例latest_books()函数叫做视图。urls.py
指出了什么样的 URL 调用什么的视图。
在这个例子中 /latest/ URL 将会调用 latest_books()这个函数。 换句话说,如果你的域名是example.com,任何人浏览网址http://example.com/latest/将会调用latest_books()这个函数。latest_books.html
是 html 模板,它描述了这个页面的设计是如何的。 使用带基本逻辑声明的模板语言。
代码:
1 | # models.py (the database tables) |
学习笔记
Django系统
环境
- python3.6
- django1.8
参考资料:
- django中文教程
- django架站的16课堂
环境搭建
- anaconda+pycharm (anaconda安装的环境是虚拟的环境,和自己电脑上的环境是独立的)
- anaconda使用
- conda list:显示当前环境安装的包
- conda env list:显示安装的虚拟环境列表
- conda create -n env_name(自己定义一个名字) python=3.6
- 激活(进入)conda的虚拟环境
- (linux)source activate env_name
- (win)activate env_name
- pip install django=1.8
pip下载模块太慢,可以指定源(文章)
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 模块
例如:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django=1.8
创建第一个Django程序
命令行启动
django-admin startproject djangolearn cd djangolearn python manage.py runserver
pycharm启动
- 需要配置(环境)
- File–>Settings–>Project:workspace–>Project Interpreter–>add–> Existing environment 选择已经安装好的环境
- django要配置runserver
- 需要配置(环境)
路由系统-urls
创建app
- app:负责一个具体业务或者一类具体业务的模块
- python manage.py startapp teacher (teacher就是app的名字)
路由
- 按照安装具体的请求url,导入到相应的业务处理模块的一个功能模块
- django的信息控制中枢
- 本质上是接受的URL和相应的处理模块的一个映射
- 在接受URL请求的匹配上使用了RE
- URL的具体格式如urls.py中所示
需要关注两点:
- 接受的URL是什么,即如何用RE对传入URL进行匹配
- 已知URL匹配到哪个处理模块
url匹配规则
- 从上往下一个一个比对
- url格式是分级格式,则按照级别一级一级往下比对,主要对应url包含子url的情况
- 子url一旦被调用,则不会返回到主url
/one/two/three/
- 正则以r开头,表示不需要转义,注意尖号(^)和美元符号($) (^代表从头开始 $代表从尾开始)
/one/two/three
r’^one/ 配对/oo/one/two/three
r’^one/“ 不配对/one/two/three/
r’three/$’ 配对/oo/one/two/three/oo/
r’three/$” 不配对- 开头不需要有反斜杠
- 如果从上向下都没有找到合适的匹配内容,则报错
2. 正常映射
- 把某一个符合RE的URL映射到事物处理函数中去
举例如下:
1
2
3
4
5
6from showeast import views as sv
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^normalmap/', sv.normalmap),
]
3. URL中带参数映射
在事件处理代码中需要由URL传入参数,形如 /myurl/param中的param
参数都是字符串形式,如果需要整数等形式需要自行转换
通常的形式如下:
1
/search/page/432 中的 432需要经常性变换,所以设置成参数比较合适
4.URL在app中处理
- 如果所有应用URL都集中tulingxueyuan/urls.py中,可能导致文件的臃肿
- 可以把urls具体功能逐渐分散到每个app中
- 从django.conf.urls 导入 include
- 注意此时RE部分的写法
- 添加include导入
- 使用方法
- 确保include被导入
- 写主路由的开头url
- 写子路由
- 编写views函数
- 同样可以使用参数
5.URL中的嵌套参数
- 捕获某个参数的一部分
- 例如URL
/index/page-3
, 需要捕获数字3作为参数1
2url(r'index_1/(page-(\d+)/)?$', sv.myindex_1), #不太好
url(r'index_2/(?:page-(?P<page_number>\d+)/)?$', sv.myindex_2), #好 - 上述例子会得到两个参数,但
?:
表明忽略此参数