pythonweb开发框架css
2.Flask开发环境搭建
关于python新建flask项目自动生成的文件夹说明:
debug=True是调试模式,当咱们更改python代码,直接F5页面就能看到更改。html
html文件写在templates文件夹里面,这个templates文件夹是模板的默认目录。python
css文件放在static文件夹里面。当咱们放问一下静态资源的时候直接在url中输入localhost:80/static/hehe.jpg便可。这是由于flask对静态文件有默认值设置的。默认状况下,flask就认为你的静态文件夹就叫static,而且位于应用程序根目录下面的。web
而应用程序根目录是根据你初始化app=Flask(__name__)的时候的代码决定了哪里是根目录。若是咱们要更改flask的默认设置只须要按照下图所示进行修改便可:算法
注意修改完后不能再经过localhost:80/static/hehe.jpg访问到了,看了源码咱们知道他会截取static_folder的值的/后面的单词做为他内部注册路由的地址,因此要经过localhost:80/statics/hehe.jpg访问数据库
固然咱们也能够指定他的地址不是statics,那么咱们须要传入一个static_url_path的值就修改为功了。这里不在演示flask
路由三种转换器:windows
url_for():
这个函数有不少的功能,这里咱们用它来输出视图函数的url。url_for后面打的就是视图函数的名称。里面的这个.就是跟python对应程序包的一个引用,意思就是当前python包的相对路径。数组
设置正则路由:
获取input标签的用户名和密码:
方式一:安全
下面指定的username和password是和上面的form中的name是一致的,使用request.form['username']
方式二:
若是要经过url来传送数据 , https://localhost:5000/login?username=jenrey
就要用下面这种方式获取参数值,使用request.args['username']
上传文件:
redirect 是重定向函数,输入一个URL后,自动跳转到另外一个URL所在的地址
注意上图windowsX用户写f.save()可能报错,须要按照下面进行修改(未测试)
应该在upload_path里面加secure_filename
写cookie:
处理错误:
返回400状态码,后面的不在处理了
可是上面这样写没有任何意义。因此咱们要按照下面这么写,有个专门处理错误的装饰器@app.errorhandler(400)
咱们不须要指定路由了, 只须要指定状态码,这样出现错误的时候,他就会本身响应到所对应的页面了。
flask扩展包:
方式一:
方式二:
产生依赖引用文档:
指令执行完毕会产生一个文档,他会把咱们用到的包列入到文档内
requirements这个文件名实际上是python约定俗成的用法,当时咱们使用这个文件名,pycharm会自动帮咱们识别咱们装了哪些包没装哪些包
安装依赖引用文档的包:
flask-script:
Flask经常使用的两个包
先安装模块
pip install flask_scriptflask_script 做用:能够经过命令行的形式来操做Flask,例如经过命令跑一个开发版本的服务器、设置数据库、定时任务等或
直接把flask对象app传入进去总体代码以下
python manage.py runserver #启动服务
flask-script官网:
具体的@manager.command用法看下面
livereload:
先安装模块:
pip install livereload
用@manager.command来,上面就传入了dev的参数
模板:
禁用网页转义功能:
或者
两个效果是同样的,只不过第二个是针对值来作这个东西。|safe在就jinjia2语法中呗成为过滤器filter,这个|safe是直接禁止转义,直接把它前面的变量输出到页面。
jinjia2过滤器:
上面网站404了。http://jinja.pocoo.org/docs/2.10/templates/#list-of-builtin-filters
自定义Markdown过滤器:
@app.template_filter()装饰器:
咱们只要在函数上声明这个装饰器,就能够把这个filter注册到模板
@app.context_processor上下文处理器
直接把方法注册到模板中。上下文处理器自己会返回一个字典的函数。
set 赋值语句
for in循环语句及for的上下文变量loop
上面两个图拼一块儿才是完整的图
关于for的上下文变量loop,loop能够得到for的不少上下文信息,例如first,last,index等
上图是,在jiajn的if语句中有一种函数式表达方式叫作条件测试函数Tests,odd就是一个测试函数,将loop.index做为参数传入odd中测试一下是否是真的。http://jinja.pocoo.org/docs/2.10/templates/#list-of-builtin-tests
自定义测试函数:
@app.template_test
模板页:
语法
{% block 名称%}
{% endblock %}
上面就是模板页啦,直接运行它是没有任何效果的,是空的。
因此是没有任何意义的,那么咱们能够直接继承这个模板
写模板的时候没有顺序的,只要名称对上,他会按照他的父模板来排。block的名称是惟一的。
首先咱们要在咱们写的html文件中引入模板,下图红框,使用extends关键字
若是咱们的内容没放到块里面就会被忽略掉,因此如今看不到以前写的任何东西了。下面咱们把内容放在块中:
显示效果以下图:
关于重写的问题:
增长下面代码后,发现被覆盖掉了
因此咱们要这么解决,加一个supper(),这样的话在上在下都随咱们本身操做。
关于block块太多的时候,能够加强代码可读性:在endblock后面能够写个名字,这样就知道end的是哪个了。
须要注意的问题:
在block里面的变量是被封闭起来的,是不能引用block外的变量的。
若是要解决这样的问题须要在block后面加一个scoped
包含页:
当咱们某些块不断去扩充的时候,可能公用的东西会不少,可能会致使咱们整个的模板愈来愈臃肿。在这个时候咱们能够采用包含页的方式,
新建一个html文件以下:
而后使用{% include '文件路径' %}
也能够以下所示跟一个数组就是包含多个文件
页面中内容的重用--宏
宏就是相似于可重用函数,只不过不是在python里面,而是在html里面。
格式{% macro %}{% endmacro %}
上面仅仅是骨架,下面补充内容
使用方式就是下面所示,跟调用函数同样的方式
若是咱们定义的宏不少,就须要从新开个新的html页面,把他们都写到一块儿,而后import进来便可.
在新建页面中写入下图所示的代码:
导入进来(以下图):注意import的时候要写as起个别名,不然会报错的哦
下面是使用方式:一样要写别名.
消息闪现
导入flash
须要在配置文件中设置 SECRET_KEY 数值能够随意,其实就是秘钥,这样能保证数据的安全,由于咱们的session是在客户端的,因此设置完SECRET_KEY后就能够经过系统本身的算法来进行验证数据安全的问题了。
这里看起来是个列表的形式,因此咱们能够屡次使用flash()
消息闪现的消息分类:
with和endwith是限制变量做用域的,errors只会在其之间有效果。原来咱们不加with,变量的做用域是在block中的,加了以后就变成with中了。