Django Web开发
第19章 Django框架web开发
-
Django是使用Python编写,基于MVC模式的框架,因为在Django中,控制器接收客户端请求的角色是由框架自行处理的,所以在Django开发中,更关注的是模型、模板、视图的MTV模式:
-
模型(Model),即数据存取层,用于处理与数据相关的相关事务。
-
模板(Template),即表现层,用于处理与变现相关的决定,例如如何实现页面显示。
-
视图(View),即业务逻辑层,是模型与模板之间的桥梁,视图处理用户请求,仅仅决定展现哪些数据给用户。
-
-
搭建Django环境
- 使用包管理工具pip:
pip install django或easy_install django
-
Django常用命令(终端窗口命令)
-
新建Django项目:
django-admin startproject project_name -
新建应用程序:
django-admin startapp app_name -
同步数据库:
python manage.py makemigrations python manage.py migrate -
开发服务器,该服务器方便开发和调试程序:
python manage.py runserver 8080(默认端口8000)。 -
清空数据库:
python manage.py flush -
打开Django环境终端:
python manage.py shell
-
-
Django中包括model, url, view, template四大模块,分别对应了MVC模式的不同功能。
19.1 实现第一个Django项目
-
终端进入根目录 E:\ 进行指令
django-admin startproject firstproject,会看见E盘生成以下目录。-
【manage.py】 一个实用的命令行工具,能以各种方式与该Django项目进行交互。
-
【_init_.py】 一个空文件,告诉Python该目录是一个Python项目。
-
【settings.py】 该Django项目的配置文件。
-
【urls.py】 该Django项目的URL声明,一份有Django驱动的网站资源目录。
-
【wsgi.py】 一个WSGI兼容的web服务器入口,用于运行项目。
-
【asgi.py】 与ASGI兼容的web服务器为您的项目提供服务的入口点。
![image]()
-
-
终端进入【firstproject】项目目录,执行
python manage.py startapp learn新建应用【learn】,会看见出现以下子目录。
![image]()
-
在配置文件【settings.py】中找到
INSTALLED_APPS添加以下代码,注册新建的应用,这样Python可以自动找到模板文件和静态文件。![image]()
-
在应用目录【learn】中打开视图文件【views.py】编写视图函数,用于显示访问页面时的内容。
#-*- coding: utf-8 -*- from django.http import HttpResponse # 引入http响应消息对象 def index(request): # 第一个参数必须是request对象,用于接收处理请求。 return HttpResponse(u"欢迎光临,这里是第一个Django项目应用!") -
打开【urls.py】文件,添加下列代码,建立url映射,关联这个视图函数。
![image]()
-
终端执行
python manage.py runserver运行测试服务器,默认端口8000,打开浏览器访问localhost:8000,成功访问了项目应用。![image]()
19.2 URL路径映射和传参
-
Django项目中的URL模块和view模块对应的是MVC模式中的controller。视图是服务器收到用户请求后,展示返回的内容,而当服务器收到请求后,Django会根据项目下的【urls.py】文件中的路径映射,去相应的视图模块查找处理函数,再返回页面数据给客户端。
-
两个传参方法:
-
path() :实现路径映射和正常参数传递,格式:<类型:变量名>或<变量名>。
-
re_path() :实现正则表达式的路径映射和参数传递,格式:(?P<变量名>表达式)。
-
例如将一个项目【blog】的【urls.py】文件中如下设置:
from django.contrib import admin from django.urls import path, re_path from blog_app import views urlpatterns = [ # 使用普通路径映射和参数传递。 path("blog/article/<int:id>/", views.article, name="article"), # 使用正则表达式路径映射和参数传递。 re_path(r"^blog/article/(?P<id>\d+)/$", views.article, name="article"), path("admin/", admin.site.urls), ]
-
-
设置路径映射时,可以将路径命名一个别名,相当于给URL命名一个全局变量,在网页模板中使用较为方便,如:
//使用url别名作锚链接 <a href="{% url "article" id %}">文本</a> //使用普通url作锚链接 <a href="blog/article/id">文本</a> -
url别名只能在网页模板中使用,而不能在 view中使用,因此要用 reverse() 方法转化成普通url在 view中使用。
from django.urls import reverse url = reverse("blog:article",args=[id]) # 项目名blog可作为命名空间。 -
urls模块的path方法目前不能指向一个基于类的视图,Django的解决办法是提供一个as_visw()方法将一个类伪装成方法。
from django.contrib import admin from django.urls import path from blog_app import views urlpatterns = [ path("", views.ArticleClass.as_view(), name = "article_class"), path("admin/", admin.site.urls), ] -
在配置url路径映射时,可以设置自定义传入额外的参数:
from django.contrib import admin from django.urls import path from blog_app import views urlpatterns = [ path("blog/article/<int:id>/", views.article, name = "article", {"bg":"black","display":3}), path("admin/", admin.site.urls), ]
19.3 view视图
-
Django框架中,视图view通常和url路由一起工作,当服务器收到客户端请求后,会根据在【urls.py】文件中的路径映射,去视图中查找相应的处理函数,在返回http网页信息。
-
实际web开发中,view模块不仅要负责从数据库提取数据,而且需要设置用于显示内容的模板,并提供模板渲染页面所需的内容对象。
-
render(request, template_path, context_obj, content_type)方法:用于转发请求给模板,并返回模板内容。
-
get_object_or _404():默认调用Django的get方法,如果请求的资源不存在,则抛出http404状态。
-
项目示例待完善。。






浙公网安备 33010602011771号