Open keyfall opened 4 years ago
安装插件flask-script
pip install flask-script
代码
运行
-d 开启debug -r 开启自动重启 -h 指定主机 -p 端口
any例子
int例子
格式:url_for('函数名',key=value,key=value)
获取args中的参数时,使用下面的,上面的如果参数名不对,会报错,下面的如果没有参数,会显示none,不会报错 getlist是针对两个参数名相同时,获取值的情况,如果用get获取的话,会获取前一个
1.使用render_template("hello.html")
第二个参数,控制返回的状态码
2.通过make_response(a,b,c)
a:返回内容,可以是render_template()
b:状态码
c:表头
3.自己创建response
ajax的坑
坑了我一天,现在写一下
先上代码吧 js
<script type="text/javascript">
$('#login').click(function(){
var formData = $('#loginForm').serialize();
$.ajax({
url:'http://127.0.0.1:5000/addarticle',
type:"POST",
data:formData,
dataType:"json",
success:function(result){
alert('ok');
alert(result.abc)
},
error:function(data){
alert("请求出错");
alert(data);
}
});
});
</script>
flask
@app.route('/addarticle',methods=['GET','POST'])
def addarticle():
if request.method == 'POST':
if not request.form['title'] or not request.form['content'] \
or not request.form['keyword'] or not request.form['description'] \
or not request.form['updatetime']:
flash("Please enter all the fields",'error')
else:
time = datetime.strptime(request.form['updatetime'],'%Y-%m-%d').date()
blog = blogs(request.form['title'],request.form['content'],request.form['keyword'],\
request.form['description'],time)
db.session.add(blog)
db.session.commit()
return jsonify({'success':'ok','abc':'abcde'})
return redirect(url_for('article'))
@app.route('/html',methods=['GET','POST'])
def html():
return render_template("add-article.html")
说下flask中ajax的流程,从页面过来后,进入指定的url,这里是addarticle,然后post请求进入/html(这是ajax所在页面),意思就是不是直接跳回到ajax的html页面,而是通过路由进入到/html,然后进入ajax页面,所以需要在/html加入methods=['GET','POST']
1.需要在html加入methods=['GET','POST']
2.在ajax语句结束后,加入一个alert,才会进入success或者error(是加一个语句还是一行代码没试)
3.本来url使用的是‘127.0.0.1:5000/addarticle’进入的,然后就一直不成功,试了一天,到晚上了,不管是端口进入还是url_for进入都可以了,以后如果端口不行,就用url_for进行url设置,先避免一个错误
4.页面返回是用jsonify进行json转换jsonify({'success':'ok','abc':'abcde'})
在Flask中使用template_folder属性
app = Flask(__name__,template_folder='../front')
这是设置template文件夹为当前py文件上一个文件夹下的front文件夹
最好不用上面的,照着官方写吧,因为我不清楚怎么使用static,前段老是引不到静态文件,看网上有人用蓝图可以 如果可以引到静态文件,那么就可以实现前后文件分离,前段写好,不用放到flask文件夹下static文件夹里
修改样式时,发现总修改不过来,但是每次都清空浏览器缓存,不太方便,可以在app设置里进行缓存存在时间设置,来解决此问题
目的是使得flask拥有目录结构,url划分,before_request划分
manage.py是启动文件
views是视图文件夹
manage.py
from sss import app
if __name__ == '__main__':
app.run()
views.init.py
from flask import Flask
app = Flask(__name__)
from .views.account import ac
from .views.admin import ad
from .views.user import us
app.register_blueprint(ac)
app.register_blueprint(ad)
app.register_blueprint(us)
views.admin.py
from flask import Blueprint
#前缀名
ad = Blueprint('ad',__name__,url_prefix='/admin')
#部分前置
@ad.before_request
def bf():
print('before_request')
@ad.route('/home')
def login():
return 'home'
优点: 搜索依赖库的范围是基于目录的方式,很有针对性 搜索的依据是脚本中所 import 的内容 可以在未安装依赖库的环境上生成依赖文件 查找软件包信息时,可以指定查询方式(只在本地查询、在 PyPi 查询、或者在自定义的 PyPi 服务)
pipreqs ./ --encoding=utf8
防止数据污染,假的全局变量,每个线程调用,都会在内存中复制一份,所以数据不会被污染 为每个线程开辟一块空间进行数据存储
from threading import Thread,local
import time
xl = local()
def ta(arg):
xl.valuse = arg
time.sleep(2)
print(xl.valuse)
for i in range(10):
t = Thread(target=ta, args=(i,))
t.start()
Flask(__name__, template_folder='/abc')
2.模板文件夹要和Flask()所在文件同目录,这是最重要的一点,否则声明了位置也找不到
安装flask
pip install flask
hello flask
新建hello.py文件![图片](https://user-images.githubusercontent.com/21198605/64900124-a3675080-d6c1-11e9-8fd5-eace72d7d408.png)
运行hello.py
python3 hello.py
浏览器输入这个地址,就可以了 这么写只能在本地浏览器浏览,使用宿主机进行浏览,使用下面的方法,把ip写成0.0.0.0参数配置及使用
threaded是使用多线程,因为python内部机制是单线程的,也导致了用不到100%的cpu,如果电脑是4核的,那cpu运用率不到25%,所以有了这个功能
![图片](https://user-images.githubusercontent.com/21198605/64900394-803da080-d6c3-11e9-906e-f0579f160084.png)
上图中debugger pin是用来调试程序的
这个因为是在服务器会显示debugger pin,所以是方便管理员进行代码的检查