了解过flask的同学知道,flask实现一个网站很简单,只需要做几件事:实例化Flask,定义路由,定义网址内容,就像下面一样:
from flask import Flask
app = Flask(__name__) # 实例化
@app.route("/") #定义路由
def index():
return "Hello world!"
只要flask run
,就可以跑起来Hello, world
了。
而我们使用Django的时候,要新建一个项目,就要 django-admin startproject project
,这样起码会有四个文件,那么有没有简单的Django实现,像flask一样简短呢,答案是可以的。
实现最简短的Django,我们做这几件事:定义路由,定义视图函数,接受命令行参数。
- 路由实现
Django寻找路由的时候,需要从urlpatterns
那里寻找,所以我们定义了一个urlpatterns
,除此之外,我们还需要告诉根路由在哪,所以要导入设置settings,告诉它URL_CONF就在这个文件里面
settings.config(
ROOT_URLCONF = name,
)
urlpatterns = [
path("', index)
]
- 视图函数
当我们对一个页面发起请求的时候,Django会创造一个HttpRequest对象,把HttpRequest对象作为第一个参数传递个视图函数,所以Django里的视图函数一定会有一个request对象,之后视图函数会返回一个HttpResponse对象,所以我们还需要用到一个返回HttpResponse的函数HttpResponse()
def index(request):
return HttpResponse("Hello, world.")
- 接受命令行参数
一般在项目里启动时,我们要用到python manage.py runserver
,现在我们的Django是一个单项目,所以我们需要一个函数来接受命令行参数来启动Django
execute_from_command(sys.args)
下面就是具体的代码,为了支持调试模式,我们加入了DEBUG=True
来开启调试模式。之后,只要命令行输入python hello.py runserver
就可以跑起来了。可以看到,Django的实现也可以轻量化。
hello.py
from django.conf import settings
from django.path import HttpResponse
from django.urls import path
from django.core.management import execute_from_command_line
settings.config(
DEBUG=True,
ROOT_URLCONF=__name__,
)
def index(requets):
return HttpResponse("Hello, world!")
urlpatterns = [
path("", index),
]
if __name__ == "__main__":
execute_from_command_line(sys.argv)
网友评论