Photo from Instagram
本文章是自己学习 Django 框架的第三篇。前面两篇文章主要记录 Django 理论相关知识。从本篇文章开始,将以理论和实战方式讲述 Django 框架的知识。让我们一起来 coding 吧~
1 新建项目
我们开发 Web 程序是基于 Django 框架,所以要想创建 Django 项目。创建项目有两种方式,一种是使用 Django 管理任务django-admin.py,另一种是借助 IDE 工具Pycharm。
使用 django-admin.py
1)新建project
在你准备存放项目的目录下,打开终端,执行新建命令。
新建 Project 成功之后,你会发现目录下会多出一些文件。这些文件主要跟工程配置有关系,跟具体业务逻辑没啥关系。
2)新建 application
新建了项目,为什么还要新建 application ?简单来说project可以理解为一个容器,application可以理解为 project 中的一个网站应用。对于每个Django项目有且只有一个 project, 而一个 project 可以包含多个 application。
到最外层的 Django_demo 目录下新建我们的 application
新建成功后,会发现多了一个名为 test 目录。看到里面有些文件,是否心中有种似曾相识的感觉?
3)配置应用
最后一步,我们需要把刚才新建的 application 加到 settings.py 中的 INSTALL_APPS 中 。具体操作是修改 Django_demo/Django_demo/settings.py 文件,
借助 Pycharm
有些小伙伴可能使用命令工具方式比较复杂,是否有比较简便的方式?当然,那借助 Pycharm,直接一步搞定。
打开 PyCharm IDE 工具,点击 File -> New Project, 左边选择Django。新建如下图所示:
新建成功之后会看到这样的目录结构 ,Pycharm 已经帮我们搞定了大部分工作。
2 视图与URL配置
2.1 第一个页面
URL配置(URLconf.py) 是文件路由,是 URL 和 URL 对应视图的映射表。换句话说,就是由它来分发网络请求,将每个 Web 请求根据 URL 地址来调用视图来显示。URL 模式的语法是:
一般在 URLconf.py 中新增一个 URL 表达式,就需要在 view.py 中增加一个视图函数。
我们来根据上述规则创建下首个页面。首先在 view.py 中增加首页视图函数。
视图中的函数名 index 对应是 URL 地址中的 path 部分。 那什么是 path 呢?URL 地址定义是协议://host:port/path。假如有个地址是http://127.0.0.1:8000/music。http 就是协议;127.0.0.1 是主机号,主机号可以是 IP 地址或者域名,不过域名是比较常见,因为容易记;port 是端口号,如果端口号是 80 可以忽略不写,其他则要填写完整;music 就是前面说的 path,端口号后面第一个"/"符号后面的字符串都是路径(path)。index 比较特殊,我们通常把 index 设定为首页,所以访问首页的时候,path 不用填写。如果你还不很了解,我们等会运行下程序,你就会涣然大悟。
在创建视图函数之后,我们需要在 urls.py 中配置好 url 匹配规则。
配置了 url 匹配规则,剩下最后一步运行验证了。点击 pycharm 工具上的运行按钮(绿色的播放键),然后打开浏览器,在地址栏输入http://127.0.0.1:8000。你会看到我们 index 函数返回的内容。
如果你访问的地址是http://127.0.0.1:8000/,同样也是能正常看到页面内容。
pycharm 能启动一个 web 服务器,内部是使用到 manage.py 脚本。因此,我们也可以使用命令行的形式来启动一个 web 本地测试服务器。在最外层的 Django_demo 目录下,打开终端命令行工具,执行python manage.py runserver即可启动服务器。
2.2 返回 HTML 页面
视图返回结果是一串字符串,我们只是用于做测试用的。但是实际开发中,返回结果通常是 html 页面。view 函数想要返回 html 页面,使用 render() 携带一个 html 页面即可。render() 内部返回的也是一个 HttpResponse 对象。
我们在 view.py 中增加名为content的视图函数,用来返回一个html 页面。
接着在 application 目录下新建名为 templates 的文件夹,再创建一个 content.html 文件。
还要配置下 url 路由规则。
最后一步,使用浏览器浏览 content 的页面。
2.3 url 路由的命名组
url 路由有另种命名组,一种是无名名组,另一种是有名分组。 无名分组是使用简单的、没有命名的正则表达式组(通过圆括号)来捕获 URL 中的值。上述两个例子和以下的一些都是都是无命名分组。
如果返回的 URL 的 path 为/content/2018时,是无法匹配到上面任何一个模式,因为每个模式要求 URL 以一个斜线结尾。paht 为/content/2018/则能匹配到两个模式,是匹配到哪个呢?因为模式按照顺序来匹配的,所以第一个模式会被优先匹配。path 为/content/2018/02/将匹配到第三个模式。Django 调用的是 views 文件中的month_content(request, '2018', '02')。
无名分组的视图只能接受 python 中传入的固定值参数,如值 2018 等。但是无法获取到存放值的变量,而有名分组恰恰能解决这个痛点。有名分组只是在无名分组的正则表达式上增加一个参数即可。语法是(?Ppattern),其中 name 是组的名称,pattern 是要匹配的模式。
具体改造如下:
经过改造之后,当访问 path 为/content/2018/02/时,请求将调用views.content(request, year='2018', month='02')函数,而不是views.month_content(request, '2018', '02')。
2.4 路由转发器(include)
如果一个项目下有很多的 application,那么在 urls.py 里面就要写巨多的 urls 映射关系。这样看起来很不灵活,而且杂乱无章。这时候就要根据不同的 application 来分发不同的url请求。
假如在上述的 project 中,我又新建了一个新的 application,名为 app02。配置路由转发器操作如下:首先,在 urls.py 里写入 urls 映射条目。值得注意是,要导入Django 的 include 方法。
其次,在 app02 目录下创建一个 urls.py 文件,用来处理请求的url,使之与 views 建立映射。
3 写在最后
我新建一个 Python Web 学习交流 QQ 群,群号:701534112。或者长按以下二维码加群。欢迎大家加群,一起交流,一起学习。
往期 Dango 学习笔记
PS:本文是今天最后一篇文章了,年后再继续更新 Django 的学习笔记。在这里,先祝大家新年快乐!另外,为了感谢读者的支持,我过年发红包感谢大家。
END
作者:猴哥
公众号:极客猴
爱好读书,喜欢钻研技术,梦想成为文艺青年的 boy。
领取专属 10元无门槛券
私享最新 技术干货