Django-1
Django的模型
下载Django
创建一个项目
在命令行中,使用 cd 命令进入你想存储代码所在的目录,然后运行以下命令:
django-admin.py startproject mysite
让我们来看看 startproject 都创建了些什么:
mysite/ manage.py #一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。 mysite/ __init__.py settings.py #Django 项目的设置/配置 urls.py #Django 项目的 URL 声明; 一份由 Django 驱动的网站“目录” wsgi.py #一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目
运行Django项目
启动命令:
python manage.py runserver
这样就已经启动了 Django 开发服务器,一个纯粹的由 Python 编写的轻量级 Web 服务器。我们在 Django 内包含了这个服务器,这样你就可以迅速开发了,在产品投入使用之前不必去配置一台生产环境下的服务器 – 例如 Apache,Nginx。
现在是一个很好的提示时机:不要 在任何类似生产环境中使用此服务器。它仅适用于开发环境。(我们提供的是 Web 框架的业务,而不是 Web 服务器。)
现在服务器正在运行中,请在你的 Web 浏览器中访问 http://127.0.0.1:8000/ 。 你会看到一个令人愉悦的,柔和的淡蓝色 “Welcome to Django” 页面。它工作正常!
默认情况下,runserver 命令启动的开发服务器只监听本地 IP 的 8000 端口。如果你想改变服务器的端口,把它作为一个命令行参数传递即可。例如以下命令启动的服务器将监听 8080 端口:
python manage.py runserver 8080
创建应用
你通过 Djaong 编写的每个应用都是由 Python 包组成的,这些包存放在你的 Python path 中并且遵循一定的命名规范。 Django 提供了个实用工具可以自动生成一个应用的基本目录架构,因此你可以专注于编写代码而不是去创建目录。
项目与应用之间有什么不同之处?应用是一个提供功能的 Web 应用 – 例如:一个博客系统、一个公共记录的数据库或者一个简单的投票系统。 项目是针对一个特定的 Web 网站相关的配置和其应用的组合。一个项目可以包含多个应用。一个应用可以在多个项目中使用。
创建应用命令:
python manage.py startapp polls
这将创建一个 polls 目录,其展开的样子如下所示:
polls/ __init__.py models.py tests.py views.py
URL配置
为了给一个应用设计URL,你需要创建一个Python 模块,通常称为URLconf(URL configuration)。这个模块是纯粹的Python 代码,包含URL 模式(简单的正则表达式)到Python 函数(你的视图)的简单映射。
简单的 URLconf
from django.conf.urls import url from . import views urlpatterns = [ url(r'^articles/2003/$', views.special_case_2003), url(r'^articles/([0-9]{4})/$', views.year_archive), #相当于调用 year_archive(request,year) url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive), url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail), ]
命名组
上面的示例使用简单的、没有命名的正则表达式组(通过圆括号)来捕获URL 中的值并以位置 参数传递给视图。在更高级的用法中,可以使用命名的正则表达式组来捕获URL 中的值并以关键字 参数传递给视图。
在Python 正则表达式中,命名正则表达式组的语法是(?P<name>pattern)
,其中name
是组的名称,pattern
是要匹配的模式。
下面是以上URLconf 使用命名组的重写:
from django.conf.urls import url from . import views urlpatterns = [ url(r'^articles/2003/$', views.special_case_2003), url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive), url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive), url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.article_detail), ]
这个实现与前面的示例完全相同,只有一个细微的差别:捕获的值作为关键字参数而不是位置参数传递给视图函数。例如:
/articles/2005/03/ 请求将调用views.month_archive(request, year='2005', month='03')函数,
而不是views.month_archive(request, '2005', '03')。 /articles/2003/03/03/ 请求将调用函数views.article_detail(request, year='2003', month='03', day='03')。
在实际应用中,这意味你的URLconf 会更加明晰且不容易产生参数顺序问题的错误 —— 你可以在你的视图函数定义中重新安排参数的顺序。当然,这些好处是以简洁为代价;有些开发人员认为命名组语法丑陋而繁琐。
视图函数
一个视图函数,或者简短来说叫做视图,是一个简单的Python函数,它接受web请求,并且返回web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何东西都可以。无论视图本身包含什么逻辑,都要返回响应。
render方法
结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的 HttpResponse
对象。
render(request, template_name,[context])
redirect方法
redirect(to, [permanent=False, ]*args, **kwargs)
为传递进来的参数返回HttpResponseRedirect 给正确的URL 。