有了以前学习的基础,再看Django,能理解很多东西了。
Django
的安装(Windows
命令行中):
virtualenv learn_django
learn_django\Scripts\activate
pip 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
命令参数)。
命令行中:
浏览器中请求访问http://127.0.0.1:8000/ (没有在Django应用中写响应内容,从本地服务器收到了默认响应的页面):
下面贴上了部分源码,不管具体过程,现在创建了本地WSGI
服务器,可以处理客户端的请求。
manage.py
:
import os
import sys
if __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.
"""
...
...
来让浏览器访问http://127.0.0.1:8000/ 收到 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_literals
from django.apps import AppConfig
class 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_literals
from 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 url
from . import views
urlpatterns = [
url(r'^$', views.index, name="index"),
]
(6) 将上述ToDo
应用中的路由-视图函数映射关系添加到ToDoList
项目中:
"""ToDoList URL Configuration
The `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, include
from django.contrib import admin
urlpatterns = [
url(r'^$', include('ToDo.urls')),
url(r'^admin/', admin.site.urls),
]
完成以上代码,浏览器再发送请求到本地服务器,本地服务器会根据请求的URL调用Django应用中对应的视图函数的内容,生成响应发送给浏览器(客户端)。
然后,浏览器中访问http://127.0.0.1:8000/,本地WSGI server
会处理请求,返回一个响应给浏览器,浏览器中会看到index()
视图函数返回的index.html
模板中的内容。
以上,大概是运行Django
应用的过程。
核心的东西和Flask
差不多,客户端-服务器模式、请求-响应、路由-视图函数、模板渲染、MVC模式
(或者叫MVT模式
)。
果然,Flask
和Django
是不同的开发框架,只是工具。计算机和网络的基层原理才是重要的知识。
以后应该多学习基本原理,然后再看框架就会很清楚为什么要这样了。