创建项目目录flask-mega-tutorial
使用pycharm打开项目目录,使用命令行工具创建虚拟环境
**注:**python3.4+环境均已内部支持虚拟环境创建,执行命令为py -3 -m venv venv
;对于python3.3-环境的均需要安装virtualenv三方库进行虚拟环境安装。
设置完虚拟环境,IDE会自动加载虚拟环境,通过pip install flask
命令安装flask三方库。
若通过windows中的cmd命令行操作,可以通过.\venv\Scripts\activate.bat
命令进入虚拟环境。
需要安装的库如下:
pip install flask
其中应用程序包放置在app
目录,子文件夹 static
存放静态文件像图片,JS文件以及样式文件。子文件夹 templates
是存放模板文件。
修改app
包中 app/__init__.py
文件,编写应用的工厂函数,项目启动后会自动加载工厂函数create_app
。flask会自动加载的工厂函数名包括:create_app
、make_app
。
import os
from flask import Flask
def create_app():
"""应用工厂函数"""
# instance_relative_config:设置配置文件以instance文件夹为相对文件夹
# 即config.py配置文件放置在instance文件夹下。
app = Flask(__name__, instance_relative_config=True)
try:
# 确保 app.instance_path 存在
os.makedirs(app.instance_path)
except OSError:
pass
return app
新建视图函数文件app/hello.py
from flask.views import View
class HelloWorld(View):
methods = ['GET']
def dispatch_request(self):
return 'Hello World!'
修改应用工厂函数,新增视图注册
import os
from flask import Flask
def create_app():
"""应用工厂函数"""
# instance_relative_config:设置配置文件以instance文件夹为相对文件夹
# 即config.py配置文件放置在instance文件夹下。
app = Flask(__name__, instance_relative_config=True)
# 注册hello视图URL
from .hello import HelloWorld
app.add_url_rule('/hello', view_func=HelloWorld.as_view('hello'))
try:
# 确保 app.instance_path 存在
os.makedirs(app.instance_path)
except OSError:
pass
return app
进入虚拟环境
.\venv\Scripts\activate.bat
通过flask run
命令启动服务
(venv) $ flask run
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
创建并编辑模板文件app/templates/base.html
<html lang="en">
<head>
<meta charset="UTF-8">
{% if title %}
<title>{{ title }} - 博客title>
{% else %}
<title>博客title>
{% endif %}
head>
<body>
<div>博客:<a href="{{ url_for('hello') }}">首页a>div>
<hr>
{% block content %}{% endblock %}
body>
html>
创建并编辑模板文件app/templates/hello/hello.html
,继承直base.html
{% extends 'base.html' %}
{% block title %}Hello World!{% endblock %}
{% block content %}
<h1>Hi, {{ user.nickname }}!h1>
{% for post in posts %}
<div><p>{{ post.author.nickname }} says: <b>{{ post.body }}b>p>div>
{% endfor %}
{% endblock %}
from flask.views import View
from flask import render_template
class HelloWorld(View):
methods = ['GET']
def dispatch_request(self):
user = {'nickname': 'Super.Wong'}
posts = [
{
'author': {'nickname': '李白'},
'body': '举头望明月,低头思故乡'
},
{
'author': {'nickname': '李清照'},
'body': '知否,知否,应是绿肥红瘦'
}
]
return render_template('hello/hello.html', title='测试', user=user, posts=posts)
通过git init
命令初始化本地仓库
D:\Projects\learn\flask-mega-tutorial
(venv) $ git init
Initialized empty Git repository in D:/Projects/learn/flask-mega-tutorial/.git/
通过git remote add
命令添加远程仓库
D:\Projects\learn\flask-mega-tutorial (master -> origin)
(venv) $ git remote add origin https://gitee.com/superwong/flask-mega-tutorial.git
拉取远程仓库代码
D:\Projects\learn\flask-mega-tutorial (master -> origin)
(venv) $ git pull origin master
From https://gitee.com/superwong/flask-mega-tutorial
* branch master -> FETCH_HEAD
修改.gitignore文件,增加IDE工具配置目录的版本控制忽略
# IDE
.vscode/
.idea/
通过命令git add .
提交本地所有未提交代码
D:\Projects\learn\flask-mega-tutorial (master -> origin)
(venv) $ git status -u
On branch master
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git checkout -- ..." to discard changes in working directory)
modified: .gitignore
Untracked files:
(use "git add ..." to include in what will be committed)
app/__init__.py
app/hello.py
app/templates/hello.html
no changes added to commit (use "git add" and/or "git commit -a")
D:\Projects\learn\flask-mega-tutorial (master -> origin)
(venv) $ git add .
通过git commit
命令提交本地仓库
D:\Projects\learn\flask-mega-tutorial (master -> origin)
(venv) $ git commit -m '首次提交'
[master 8f1d3c4] '首次提交'
4 files changed, 57 insertions(+)
create mode 100644 app/__init__.py
create mode 100644 app/hello.py
create mode 100644 app/templates/hello.html
通过git push
命令推送到远程仓库
D:\Projects\learn\flask-mega-tutorial (master -> origin)
(venv) $ git push --set-upstream origin master
Enumerating objects: 10, done.
Counting objects: 100% (10/10), done.
Delta compression using up to 4 threads
Compressing objects: 100% (7/7), done.
Writing objects: 100% (8/8), 1.43 KiB | 734.00 KiB/s, done.
Total 8 (delta 1), reused 0 (delta 0)
remote: Powered By Gitee.com
To https://gitee.com/superwong/flask-mega-tutorial.git
d832605..8f1d3c4 master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.