實際上,在實際的生產中,是不會將所有的代碼寫在同一個.py文件裏的,主要原因是一個項目,少說幾萬條代碼,多則十幾萬甚至幾十萬行代碼.全寫在一個文件內非常不適合後續開發以及維護(一般一個py文件也就寫500行以內的代碼,多了閱讀以及維護都會加大難度).所以我們很有必要將原本緊密的代碼結構(耦合度很高)變得鬆散一些,把代碼拆分爲容易理解和維護(在不影響功能完整性的前提下)的小段,分門類分功能放進去,通過import 進行連接.
在這裏,如何拆分代碼又是一個很講究的東西,現在業界搞web開發的基本上都遵從MVC的結構(MTV與其差別並不大,可以一塊講).
那麼,MVC是什麼,百度吧.在這裏,我直接放上我自己的理解
#MVC
# M:Model模型 V:View界面 C:Controller控制器
#MVT(MTV)
# M:Model模型 T:Template界面(模板) V:View視圖控制器
嗯,沒有程序設計經驗的人估計搞不懂.先看了實例再說(畢竟概念很抽象)
init.py(有下滑線的!!csdn的編輯器顯示不出來)
import tornado.web
from App.urls import patterns
from App.settings import app_settings
def make_app():
return tornado.web.Application(
handlers=patterns,
**app_settings,
)
models.py
#model.py
# 這裏寫模型
# 模型:數據庫表
settings.py
#settings.py 項目配置
import os
from tornado.options import define, options
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
define('port',default=80,type=int)
define('debug',default=True,type=bool)
app_settings = {
"debug" : options.debug,
"template_path" : os.path.join(BASE_DIR, 'templates'),
"static_path" : os.path.join(BASE_DIR, 'static'),
}
urls.py
#urls.py 存放路由配置(規則)
from tornado.web import url
from App.views import *
patterns = [
url(r'/index/',IndexHandler),
]
views.py
#views.py 存放視圖(類視圖)
# 存放RequestHandler
import tornado.web
from .models import *
#類視圖
class IndexHandler(tornado.web.RequestHandler):
def get(self):
name = "蔡徐坤"
age = 24
likes = ["唱", "跳", "rap"]
user = {
"height":170,
"weight":130,
}
data = {
"name":name,
"age":age,
"likes":likes,
"user":user,
}
# self.render('index.html', **data)
# self.render('base.html')
self.render('child.html')
base.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %}首頁{% end %}</title>
<link rel="stylesheet" href="{{ static_url('css/base.css') }}">
{% block extcss %}
{% end %}
</head>
<body>
<header>
{% block head %}
{% end %}
</header>
<div>
{% block content %}
{% end %}
</div>
<footer>
{% block foot %}
{% end %}
</footer>
<script src="{{ static_url('js/base.js') }}"></script>
{% block extjs %}
{% end %}
</body>
</html>
child.html
{% extends 'base.html' %}
{% block title %}
子頁面
{% end %}
{% block extcss %}
<link rel="stylesheet" href="{{ static_url('css/child.css') }}">
{% end%}
{% block head %}
<h2>周琦 波蘭人</h2>
{% end %}
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>模板語言</h2>
<hr>
{# 註釋 #}
<p>{{ name }}</p>
<p>{{ age }}</p>
<p>{{ likes }}</p>
<p>{{ likes[1] }}</p>
<p>{{ user["height"] }}</p>
{# if語法與python類似 #}
{% if age < 18 %}
<p>蔡徐坤是女的{{ age }}</p>
{% elif age >18 %}
<p>蔡徐坤真菜</p>
{% else %}
<p>蔡徐坤是條狗</p>
{% end %}
{# foe也是 #}
{% for like in likes %}
<p>like</p>
<p>{{ like }}</p>
{% end %}
<hr>
{% for i in range(10) %}
<p>{{ i }}</p>
{% end %}
<hr>
{% for i in [x**2 for x in range(10)] %}
<p>{{ i }}</p>
{% end %}
</body>
</html>
manage.py
#接受命令行參數,並啓動項目
import tornado.ioloop
from tornado.options import parse_command_line, options
from App import make_app
#接受命令行參數
parse_command_line()
#啓動項目
app = make_app()
app.listen(options.port)
tornado.ioloop.IOLoop.current().start()
效果圖
base
child
index(帶參數)