Django学习小结
本文仅仅作为小结所用用来快速回顾知识点所用,不定期更新,不适合教学,想学习Django框架的请议步[Django手册(http://djangobook.py3k.cn/2.0/)
Django官方文档小结
the Django book 小结
Django官方文档小结
最近把Django学了下,还是先说下个人推荐下学习方法:
我一开始看的是the django book 也是很多人推荐的方法。the Django book写得比较详尽一些。解释也较为详细。缺点是版本太低了。反正在如果是直接pip安装的django的话一般是1.9.2.但是the Django book里面的貌似是1.6还是多少。中文版的更低。不兼容的地方很多。做到数据库的部分就配置不了了。所以后来转到官方的文档很快。官方的文档学习的较快。但是除了官网的文档之外还有很多详细的介绍,等到用的时候在去详细的了解。
然后说下学完的感受把:
首先其实这个Django 确实比较方便。我不太清楚跟php之类做出来的框架比怎么样。但是以我个人观点来看的话,如果不是非常复杂的网站,把前端做好就可以了。学习和维护成本都比较低。数据库的部分,设计好数据模型后,Django用三条语句就可以自动维护,还可以自动检查。urls和views映射也很方便。剩下的问题也就是模板开发。并且默认设置了admin页面。Django本身是在一个新闻发布的网站框架上开发出来的本身也比较适合开发类似的新闻网站。也许类似的信息发布网站也很方便做。
其实如果只是web开发的话我记得以前听过有一个报告说大部分网站(7-8成)都是php,python应该还更小众一些。目前的情况(听说)python用的多一些的是跟C/C++一起开发游戏服务器,或者是一些信息发布网站。java应该是更适合一些性能更高的服务器或者系统服务。
the Django book 小结
第一章:介紹Django
第二章 入门
第三章 视图和URL配置
第一章:介紹Django
- Django采用python的2.x版本,尽量不要使用3.x
- Django的基础是CGI标准。在此之上演进出来的框架
Django框架用于解决直接使用CGI标准开发网站的三个个问题:
1:使用数据库的时候的重用代码
2:把初始化问题交给框架,使设计人员专注于开发
3:代码在复杂环境下的重用问题
4:使web设计师的重新设计不会影响到业务逻辑
- MVC设计模式
不同与之前的CGI设计标准的模式,Django采用模型-视图-控制器(MVC)的设计模式。简单的看可以把文件分成4类。分别如下所示:
- 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 模板,它描述了这个页面的设计是如何的。 使用带基本逻辑声明的模板语言,如{% for book in book_list %}
- models.py
第二章 入门
- 安装python2.X
- Trunk版本
python的开发版。如果想尝鲜可以用。 安装数据库
常用的数据库大概有四类:- PostgreSQL
- MySQL
- Oracle
- SQLite 3
SQLite 3 的好处是不需要运行在服务器上。初学者来说比较合适,其他的内容还是根据其他数据的资料来学习把。
开始一个项目
- 找到一个文件夹初始化文件:
django-admin.py startproject mysite
这样就会在文件夹下创建好初始化环境,文件夹如下:
mysite/
__init__.py
manage.py
settings.py
urls.py
__init__.py 让 Python 把该目录当成一个开发包 (即一组模块)所需的文件。 这是一个空文件,一般你不需要修改它。
manage.py 一种命令行工具,允许你以多种方式与该 Django 项目进行交互。 键入python manage.py help,看一下它能做什么。 你应当不需要编辑这个文件;在这个目录下生成它纯是为了方便。
settings.py 该 Django 项目的设置或配置。 查看并理解这个文件中可用的设置类型及其默认值。
urls.py Django项目的URL设置。 可视其为你的django网站的目录。 目前,它是空的。
- 运行web服务器
这时候退回上级目录然后运行服务
cd ..
python manage.py runserver
如果在运行过程中只要不按下ctrl+C就不会中止web服务,可以通过浏览器浏览打开相应的页面:
当然这个端口和网址是可以改的。
python manage.py runserver 8080
python manage.py runserver 0.0.0.0:8000
第三章 视图和URL配置
- 静态视图:
简单的说想要调用Django显示不同的页面需要大概修改两个文件,一个是views.py,这个文件如上小结所示是用来存储显示页面的。
添加方式如下:定义一个函数调用(request),并且返回一个HttpReseponse对象。
from django.http import HttpResponse
import datetime
def hello(request):
return HttpResponse("Hello world"
另一个文件就是要修改urls.py,如上小结所示是目录:
添加方式是在urlpattern中用正则表达式把之前写的函数匹配起来。
from django.conf.urls import *
from django.contrib import admin
from mysite.views import *
urlpatterns = patterns('',
('^hello/$',hello),
)
这里有需要注意的两点
一个是原文中有错误。不知道后面该过来没有,需要修改导入库。根据例子修改就行了
另一个是在导入的时候注意还要导入mysite里的内容。
还有就是正则表达式的问题需要注意了。
Django的运行过程
- 进来的请求转入/hello/.
- Django通过在ROOT_URLCONF配置来决定根URLconf.
- Django在URLconf中的所有URL模式中,查找第一个匹配/hello/的条目。
- 如果找到匹配,将调用相应的视图函数
- 视图函数返回一个HttpResponse
- Django转换HttpResponse为一个适合的HTTP response, 以Web page显示出来
动态视图
利用python构造了一个动态返回时间的网页time.
import datetime
def current_datetime(request):
now = datetime.datetime.now()
html = "<html><body>It is now %s.</body></html>" % now
return HttpResponse(html)
导入datetime模块,
然后可以用变量now调用datetime.now返回现在的时间。
然后利用html返回python的格式化字符串,然后把他作为HttpResponse返回。由Django负责放到合适的html文件中。
- URL配置和松耦合
所谓松耦合就是说可以不用修改views.py中的函数定义而通过url.py的设置来返回特定的网址。例如如下:
urlpatterns = patterns('',
('^hello/$', hello),
('^time/$', current_datetime),
('^another-time-page/$', current_datetime),
)
其中有两个网页指向同一个函数。即同一个网页。
- 获得输入参数的动态函数
原文中间动态获得参数的部分没看懂,给出的例子有错。但是根据评论有的版本是可以成立的。
目前的成果来看可以得到如下的几个结论:
('^time/plus/(\d{1,2})/$',hours_ahead
首先,按照这样匹配是可以匹配到time/plus/2或者time/plus/23/这样的网址的。但是如果+^就不行了,但我个人决觉得可以不用这个^匹配头就自动是匹配数字了。。但是成功接受了参数。
此外,还有异常出错在execpt那一行原因不明。
def hours_ahead(request,offset):
offset = int(offset)
dt = offset
html = "<html><body>test html page %s</body><html>" %(dt)
return HttpResponse(html
以上结果可以成功运行网页显示:
test html page 2015-12-23 11:42:41.636563
除此之外讨论中有人提到的另一种方法也可以传入参数。
('^time/plus/(?P<offset>\d{1,2})/$',hours_ahead
以此可以推测出匹配的参数是小括号中的文件。但是尝试传入两个参赛出错。没有继续试下去。
- 出错提示
可以使用很多出错信息来跟踪错误
此外可以使用assert False