博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
flask简单应用以及配置文件的写法。
阅读量:5070 次
发布时间:2019-06-12

本文共 4664 字,大约阅读时间需要 15 分钟。

Flask自带的helloworld:

1 app = Flask(__name__) 2  3 @app.route('/hello')  #hello/字符串参数路径 4 #将url和函数hello_world的对应关系添加到路由中 5 def hello_world(): 6     return render_template('hello.html) #返回hello页面,并传参 7  8  9 if __name__ == '__main__':10 #监听用户请求11 #如果有用户请求,则执行app的__call__方法12     app.run()
django请求的入口:
请求进来,执行class WSGIHandler的__call__方法
flask请求的入口:
先实例化对象,再将url对应的视图函数添加到路由当中,然后请求进来执行__call__

 

flask的配置文件写法
写法一:
在主代码文件中写
app.debug = True
app.config['debug'] = True
方法二:
将配置写到settings.py文件中:
app.config['debug'] = True
并在主文件中写
1 app.config.from_pyfile("settings.py")
注意上面写的是字符串,
源码执行逻辑:
root_path就是跟目录
拿到filename 也就是settings.py,然后打开读取所有的内容。
然后对其进行编译(exec),然后在执行,并放到__dict__中。
 
方法三:
主文件写
app.config.from_object("settings.DevelopmentConfig")  #python类或类的路径
源码会先分割再通过importlib模块转换并通过反射找到这个类。
配置文件写:
1 class Config(object): 2     DEBUG = False 3     TESTING = False 4     DATABASE_URI = 'sqlite://:memory' 5  6 class ProductionConfig(Config): 7     DATABASE_URI = 'mysql://user@localhost/foo' 8  9 class DevelopmentConfig(Config):10     DEBUG = True11     '''12     继承父类,并重写父类'''13 14 class TestingConfig(Config):15     TESTING = True

 

settings配置文件默认放到根目录。
如果instance_relative_config 为True,则需要放到instance_path目录,具体可以看源码:

 

 #######################################################################

 

Flask框架的初步demo代码:
该demo实现通过账户tom密码123登陆,并存session,如果不登录无法访问index页面。
该页面通过url_for反向生成url并跳转回login.
登陆成功渲染字典USERS,前端通过三种方式取值。并通过a标签的herf给url传参,后端detail获取参数。
渲染单独信息。

 

 主代码文件:

 

1 from flask import Flask,request,render_template,redirect,session,url_for 2 from flask import render_template 3  4 app = Flask(__name__) #实例化flask对象 5 app.debug = True   #能够随时更改自动重启,不加的话每次更改代码需要手动重启 6 app.config['SECRET_KEY'] = '123456'   #secret_key,用于给session加密 7  8 # @app.route('/hello/') #hello这个路由 9 # @app.route('/hello/
') #hello/字符串参数路径10 # def hello_world(name=None):11 # return render_template('hello.html',name=name) #返回hello页面,并传参12 13 USERS = {14 1:{
'name':'jerry','age':15,'text':'jerry is a cat'},15 2:{
'name':'tom','age':14,'text':'tom is a mouse'},16 3:{
'name':'doffy','age':16,'text':'doffy is a dog'},17 4:{
'name':'micheal','age':13,'text':'micheal is a frog'}18 }19 20 @app.route('/detail/
',methods=['GET']) #methods 注明该函数可以通过的methods方法。21 def detail(nid):22 info = USERS.get(nid) #
通过url给函数传值23 return render_template('detail.html',info=info)24 25 @app.route('/index',methods=['GET'])26 def index():27 userinfo = session.get('userinfo')28 if not userinfo: #通过session判断登录状态29 no = url_for('t1')30 '''31 url_for相当于django的reverse通过Url的别名反向生成url用的。32 注意login函数的endpoint33 '''34 return redirect(no)35 return render_template('index.html',user_dict = USERS)36 37 @app.route('/login',methods=['GET','POST'],endpoint='t1') #endpoint是url的别名,相当于django中Url的name38 def login():39 if request.method == "GET":40 # res = request.query_string41 # print(res) 获取通过GET请求url传过来的参数42 return render_template('login.html')43 else:44 user = request.form.get('user')45 pwd = request.form.get('pwd')46 if user == 'tom' and pwd == '123':47 session['userinfo'] = user #设置session48 return render_template('hello.html')49 return render_template('login.html', error='用户名或密码错误')50 51 if __name__ == '__main__':52 app.run()

 

 templates目录:

 login.html:

1  2  3  4     
5
6
7 Title 8 9 10
用户登录
11
12
13
14
{
{error}}15
16 17 18

 

index.html:

 

1  2  3  4     
5
6
7 Title 8 9 10

STAFF INFO

11 {% for k,v in user_dict.items() %}12
13
14
15
16
17
18
19
20
21
22 {
# 三种数据的取法都可以使用#}23
24
25
26
number name age options
{
{ k }}
{
{ v.name }} {
{ v['name'] }}{
{ v.get('name') }}
{
{ v.age }}
info
27 {% endfor %}28 29
index.html

 

hello.html:

 

1  2  3  4     
5
6
7 hello from flask 8 9 10 {% if name %}11

Hello {
{ name }}

12 {
# 可以通过后端传值显示name #}13 {% else %}14

Hello,World!

15 {% endif %}16 17
hello.html

detail.html:

1  2  3  4     
5
6
7 Title 8 9 10

information {
{ info.name }}

11
12 {
{ info.text }}13
14 15
detail.html

 

转载于:https://www.cnblogs.com/ArmoredTitan/p/8836475.html

你可能感兴趣的文章
rocketmq消费队列代码
查看>>
LogHelper拾遗
查看>>
《当裸辞的程序猿遇上最冷季九》——累觉不爱,暂时停更
查看>>
总览:SpringCloud基础结构
查看>>
(WIP) DPDK理论学习(by quqi99)
查看>>
boost - 正则表达式xpressive
查看>>
Java学习笔记之接口和抽象类
查看>>
解决使用MasterPage后,Page.FindControl方法找不到指定控件的问题
查看>>
Spring与freemarker集成利用freemarker静态化页面
查看>>
spring 实现原理
查看>>
spark:neither spark.yarn.jars not spark.yarn.archive is set
查看>>
Win7有多条隧道适配器的原因及关闭方法
查看>>
【cs229-Lecture9】经验风险最小化
查看>>
small test on 5.29 night T1
查看>>
Cheatsheet: 2013 12.01 ~ 12.16
查看>>
Cheatsheet: 2017 10.01 ~ 12.31
查看>>
【Python】Python-skier游戏[摘自.与孩子一起学编程]
查看>>
HDU - 1816 Get Luffy Out *(二分 + 2-SAT)
查看>>
C语言如何实现C++中对象属性和方法
查看>>
invokedynamic字节码指令
查看>>