好了,进入到Flask学习,咱不扯没用的理论知识,啥是Flask,啥是Django,Flask VS Django对比有啥好处,如果想知道这些理论的东西,可以百度参考网上其他人文章。因为咱们就是一把梭,讲毛的理论。
新建一个demo工程,弄一个Hello world玩玩,工程如下:
# 第一步:导入Flask类
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "<h1>hello world</h1>"
if __name__ == "__main__":
app.run(debug=True)
直接运行上述代码,报如下错误:
解决方案:
想在python代码中输出汉字。但是老是出现SyntaxError: Non-ASCII character '\xe4' in file test.py on line , but no encoding declared。
如上图,在代码第一行加入编码格式。
直接运行,第一个Hello world已经完成。
好了,开始讲解如上代码表示什么意思:
上述代码,去掉注释和第一行的导入Flask类,一共6行代码:接下来给大家扯扯这6行代码表示什么意思:
app = Flask(__name__)
这行代码的意思如下:
我们创建一个该类的实例,第一个参数是应用模块或者包的名称,或者可以这样说为了确定程序所在目录。如果你使用单一的模块(如本例),你应该使用 name ,因为模块的名称将会因其作为单独应用启动还是作为模块导入而有不同( 也即是 'main' 或实际的导入名),这样 Flask 才知道到哪去找模板、静态文件等等。
看完上述解释,估计还是有人理解不了,好了,为了让大家更好的理解,那么我先解释第五行代码和第六行代码的if判断
if __name__ == "__main__":
app.run(debug=True)
新建两个类,给大家解释下:
代码炒鸡简单:
两个类都是只有一行代码:
运行MyModule代码:结果如下:
运行调用者代码如下:
如上结论所知:
1 :如果在当前类当中运行,那么if判断成立 name ,代表:main
2: 如果上述代码在被其他文件导入当成模块使用的时候, name ,结果表示 .py前面的文件名。
理解完成之后,我们在看第一行代码 , 现在就好理解了。
app = Flask(name)
修改代码:app = Flask("main")
试试看看效果如何:
没有任何问题,如果参数去掉,什么都不传试试。
代码直接报错,说需要有参数,但是我没有传。那我在传其他的试试,比如我传一个数字2018试试。
app = Flask(2018)
不好意思,没有这个属性,直接报错了。说明不能传数字。
在修改下,在2018上加双引号,改成字符串。
app = Flask("2018")
没有问题。在修改成如下代码:
app = Flask("hello")
发现也没有问题:接下来,我们换一种方式来进行测试,我们来看看Flask如何知道应用程序所在的目录,修改如下代码:
if __name__ == "__main__":
#打印当前应用程序存储的所有路由映射
print app.url_map
app.run(debug=True)
运行当前代码,结果如下:
map里面包含两个元素,第一个元素是根目录,对应着代码上面的根路由@app.route("/")指向我们的视图函数hello,第二个元素是Flask帮我们创建的/static/文件名字,指向static,既然系统帮我们创建了static,那我们来测试一下。在static文件下面新建一个文件。
直接指向新建的Hello.html文件发现没有任何问题,可以找到html文件里面的内容,继续修改第一代码的参数如下:
app = Flask("2018")
发现没有任何问题,继续修改成name
发现没有任何问题,继续修改成main
发现没有任何问题,继续修改成“abc”
修改成“abc”报错,继续修改成“abcdefg”
发现没有问题,能找到当前页面,
在随便修改成 ”eeeeee“
可以正常访问,在随便修改成 ”socket“
我们来看看真正的原因,通过如下命令,help("modules"),找到python所有的模块。
不能传入这里面任意模块的字符串名字:
综上所述:(上面例子比较乱,总结下:)
第一行代码的参数:
1 : 可以是字符串,也可以是name
2:不能传入python里面内置的模块名称,因为如果传入了,那么Flask解析器会在Static文件下查找是否有这样一个模块,如果找不到就会报错,如果传入的不是模块的名称,那么解析器会自动去static里面查找默认的路径,
3:使用pycharm自带的Flask创建项目,不能测试该参数的作用。
@app.route("/")
def hello():
return "<h1>hello world</h1>"
上述代码的意思:
1 : 第一行代码,表示根路由。@app.route("/",methods=["get","post"]),并且可以传入请求的方式。
网友评论