本文共 3737 字,大约阅读时间需要 12 分钟。
有了以前学习的基础,再看Django,能理解很多东西了。
Django
的安装(Windows
命令行中):
virtualenv learn_djangolearn_django\Scripts\activatepip install Django
使用Django-admin
新建一个ToDoList
项目:
Django-admin startproject todolist
ToDoList
项目结构如下:
mysite/ manage.py mysite/ __init__.py settings.py urls.py wsgi.py
暂时不做任何处理,直接使用在命令行中运行python manage.py runserver
(python manage.py
运行python
模块,多输入了一个runserver
命令参数)。
命令行中:
浏览器中请求访问 (没有在Django应用中写响应内容,从本地服务器收到了默认响应的页面):
下面贴上了部分源码,不管具体过程,现在创建了本地WSGI
服务器,可以处理客户端的请求。
manage.py
:
import osimport sysif __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ToDoList.settings") try: from django.core.management import execute_from_command_line ... ... execute_from_command_line(sys.argv)
django.core.management.py
:
def execute_from_command_line(argv=None): """ A simple method that runs a ManagementUtility. """ utility = ManagementUtility(argv) utility.execute()
class ManagementUtility(object): """ Encapsulates the logic of the django-admin and manage.py utilities. """ ... ... def execute(self): """ Given the command-line arguments, this figures out which subcommand is being run, creates a parser appropriate to that command, and runs it. """ ... ...
来让浏览器访问 收到 Hello, World!
响应:
(1) 在ToDoList
中新建一个ToDo
应用(命令行中python manage.py startapp ToDo
),
Django
将ToDo
应用分成了很多的部分,符合MVC
模式,: ToDo/ migrations/ __init__.py __init__.py admin.py apps.py models.py tests.py views.py
(2) 将ToDo应用添加到ToDoList/settings.py/INSTALLED_APPS
列表中:
INSTALLED_APPS = [ 'ToDo.apps.ToDoConfig' 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles',]
(3) ToDo
应用中,migrations
文件夹与数据迁移有关,暂时没什么数据,先不管。
__init__.py
初始化应用,暂时不管。 admin.py
大概管理员身份运行应用,暂时用不到。 apps.py
有ToDo应用的基本信息((2)中添加到了ToDoList项目中): from __future__ import unicode_literalsfrom django.apps import AppConfigclass TodoConfig(AppConfig): name = 'ToDo'
model.py
处理数据相关,暂时不用管。
test.py
用于测试应用,暂时用不到。 views.py
负责将数据展示给客户端,现在能用到。 (4) 在views.py
中写一个index()
视图函数,视图函数最后返回一个模板响应,这个和Flask
中一样,模板中是响应内容:
ToDo/views.py
:
# -*- coding: utf-8 -*-from __future__ import unicode_literalsfrom django.shortcuts import render# Create your views here.def index(request): return render(request,'index.html')
(5) 在ToDo
应用中新建一个urls.py
文件,添加路由和视图函数的映射关系:
ToDo/urls.py
:
from django.conf.urls import urlfrom . import viewsurlpatterns = [ url(r'^$', views.index, name="index"),]
(6) 将上述ToDo
应用中的路由-视图函数映射关系添加到ToDoList
项目中:
"""ToDoList URL ConfigurationThe `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/1.11/topics/http/urls/Examples:Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')Including another URLconf 1. Import the include() function: from django.conf.urls import url, include 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))"""from django.conf.urls import url, includefrom django.contrib import adminurlpatterns = [ url(r'^$', include('ToDo.urls')), url(r'^admin/', admin.site.urls),]
完成以上代码,浏览器再发送请求到本地服务器,本地服务器会根据请求的URL调用Django应用中对应的视图函数的内容,生成响应发送给浏览器(客户端)。
然后,浏览器中访问,本地WSGI server
会处理请求,返回一个响应给浏览器,浏览器中会看到index()
视图函数返回的index.html
模板中的内容。
以上,大概是运行Django
应用的过程。
核心的东西和Flask
差不多,客户端-服务器模式、请求-响应、路由-视图函数、模板渲染、MVC模式
(或者叫MVT模式
)。
果然,Flask
和Django
是不同的开发框架,只是工具。计算机和网络的基层原理才是重要的知识。
以后应该多学习基本原理,然后再看框架就会很清楚为什么要这样了。