Django学习

昨天看了一个关于如何使用Django编写一个blog的视频,发现听了一个小时仍然稀里糊涂,一步步照着做完全不懂为什么,虽然最终还没运行成功。。。还是先理解一下Django框架及其设计模式吧。

1、Django是什么

Django是python的web开发框架,遵循MVC的设计模式,但在Django中通常称为MTV(model-template-views)。框架能够帮助你把程序的整体架构搭建好, 而我们所需要做的工作就是填写逻辑, 而框架能够在合适的时候调用你写的逻辑, 而不需要我们自己去调用逻辑, 让Web开发变的更敏捷。

1.1、MVC模式

模型(model):模型持有所有的数据、状态和程序逻辑。模型独立于视图和控制器

视图(view):用来呈现模型。视图通常直接从模型中取得它需要显示的状态与数据。对于相同的信息可以有多个不同的显示形式或视图

控制器(controller):位于视图和模型中间,负责接受用户的输入,将输入进行解析并反馈给模型,通常一个视图具有一个控制器

他们之间以一种插件式的、松耦合的方式连接在一起,模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求,其示意图如下所示:

1.2、MTV模式

Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django的MTV分别是值:

M 代表模型(Model):负责业务对象和数据库的关系映射(ORM)。

T 代表模板 (Template):负责如何把页面展示给用户(html)。

V 代表视图(View):负责业务逻辑,并在适当时候调用Model和Template。

除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template,MTV的响应模式如下所示:


1,Web服务器(中间件)收到一个http请求

2,Django在URLconf里查找对应的视图(View)函数来处理http请求

3,视图函数调用相应的数据模型来存取数据、调用相应的模板向用户展示页面

4,视图函数处理结束后返回一个http的响应给Web服务器

5,Web服务器将响应发送给客户端

1.2.1、ORM对象关系映射

ORM(Object Relational Mapping)是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。

在业务逻辑层和用户界面层中,我们是面向对象的。当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。ORM解决的主要问题是对象关系的映射。域模型和关系模型分别是建立在概念模型的基础上的。域模型是面向对象的,而关系模型是面向关系的。一般情况下,一个持久化类和一个表对应,类的每个实例对应表中的一条记录,类的每个属性对应表的每个字段

1.2.2、MTV模式对应到Django中的文件



2、Django怎么用

2.1、创建项目

 pythoon django-admin startproject guest      #创建guest项目

创建完成后,自动生成以下几个文件

a、guest/__init__.py:

一个空的文件,用它来标识一个目录为Python的标准包(如果__init__.py不存在,这个目录就仅仅是一个目录,而不是一个包,它就不能被导入或者包含其它的模块和嵌套包。可以为空)

b、guest/settings.py:

Django项目的配置文件,包括Django模块应用配置,数据库配置,模板配置等

c、guest/urls.py:

Django项目的URL声明,在URL请求和处理该请求的视图函数之间建立一个对应关系(一份由 Django 驱动的网站"目录"。决定127.0.0.1:8000后面可以接哪些内容)

urls.py的工作原理:浏览器发送请求URL,服务器根据请求的URL,在项目所在的所有应用的urls.py配置文件中进行查找,如果能匹配到该URL,就会将该URL交给其对应的视图函数进行处理。负责处理该URL的视图函数,会搜集一些业务数据,然后把这些数据,通过return render(request,'模板文件‘’)

d、guest/wsgi.py:

服务器网关接口,为WSGI兼容的Web服务器服务项目的切入点

e、manage.py:

一个命令行工具,可以让你在使用Django项目时以不同的方式进行交互

2.2、创建应用

进入manage.py所在的目录,运行  python manage.py startapp sign   #创建sign应用

创建完成后生成以下文件:

a、migrations/:

用于记录models中数据的变更

b、__init__.py

c、admin.py:

映射models中的数据到Django自带的admin后台,因此无须自行编写后台管理模块

d、apps.py:

用于应用程序的配置

e、models.py:

创建应用程序数据表模型(对应数据库的相关操作)

f、tests.py:

创建Django测试

g、views.py

控制向前端显示哪些数据

2.2.1、project与app的区别

一个project包含很多个Django app以及对它们的配置

技术上,project的作用是提供配置文件,比方说哪里定义数据库连接信息, 安装的app列表,TEMPLATE_DIRS,等等

一个app是一套Django功能的集合,通常包括模型和视图,按Python的包结构的方式存在(app的一个关键点是它们是很容易移植到其他project和被多个project复用)

即:project的配置构成了一个全局的运行平台,各个APP都运行在这个全局的运行平台上,而APP代表的是一个相对独立的功能模块,所以程序的逻辑都在APP中

2.3、运行项目

Django已经提供了web容器,通过“runserver”命令即可运行

python manage.py runserver (默认为本机的8000端口启动)

或指定IP地址与端口号启动  python manage.py runserver 127.0.0.1: 8001

打开浏览器,若能成功访问 http://127.0.0.1,则说明成功运行

2.4、页面中打印hello Django

a、配置guest/settings.py文件,将sign应用添加到项目中

b、在guest/urls.py文件中,导入sign应用的views,并添加index/路径配置

c、在sign/views.py文件中,添加index函数

d、创建templates文件,并在其中创建一个index.html的网页(很奇怪的是,在这里我将templates文件创建在sign文件下,但是网页实际访问的是Django安装目录下已存在的templates文件下的文件,所以最开始页面报错,提示源文件不存在)

e、运行项目 并打开浏览器访问http://127.0.0.1:8000/index,即可访问index.html页面

Django工作流如下





参考:

www.zhihu.com/question/26235428

blog.csdn.net/acs713/article/details/40651457

www.cnblogs.com/wgbs25673578/p/5140482.html

muilpin.blog.163.com/blog/static/16538293620121212481865/

《Python web接口开发与测试》

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容