当前位置 : 首页 - flask开发的web项目

flask开发的web项目

发布时间:2020年11月14日 15:51 作者:誉新源

python在网络中的应用非常广泛,在这里我们来看看Web服务器和Web开发。python几行代码就可以搭建一个web服务器,然后使用python语言来开发后台服务。我在以前的文章中对web服务进行了更详细的介绍,该服务主要包含各种类型的http请求,比如get、post等常规请求。对于Web开发、跨页面跳转、数据传输通信、Web存储、缓存等都是基本的知识,如果使用本地python编写估计仍然是非常困难的,那么由于我们的前人,有一些成熟的框架模块,我们将非常方便的使用。当然至于python用于web服务的性能如何,这里我们不做讨论。在Web开发框架的一部分中,更为著名的包括django、park和其他框架。


flask开发简单网页
如果我们开始向main.py文件添加一些内容,并使其显示在网页上,我们将进入我们常见的web开发模式。因为main.py是一个python文件,而不是我们经常使用的html,所以不能用html语言直接编写接口和内容来编写接口和内容。


对于web开发和运营,我们知道它是浏览器地址栏中的一个url,也就是请求的网页地址,比如http://127.0.0.1/index或者http://127.0.0.1/home/user,或者http://127.0.0.0.1/index/news在使用一些服务器语言来实现web开发时,url构建和定位使用了面向对象或者函数方式。例如http://127.0.0.1/home/user,可以进行划分:http://127.0.0.1是服务器地址,默认情况下请求index方法页。地址后的/home/user可以理解为在服务器地址文件夹的home类中定位用户方法页。


在使用flask框架开发的时候,这个网址的构建和定位也很重要。我们先来看一个简单的案例:


fromflaskimportFlaskapp=Flask(__name__)@app.route('/')defindex():return'welcometomywebpage!'if__name__=="__main__":app.run(port=2020,host="127.0.0.1",debug=True)
代码中使用了装饰器来制定路由url,具体写法如下:


@app.route(。)#调用route路由方法,在括号中给出参数,/符号默认为主页@app.route(/home/user)#调用route路由方法,/home/user定位于访问user方法页面。


定制路由url后,需要给出一个实现方法,用python来定义函数,比如上面的index函数,返回一个字符串welcometomywebpage。也就是说,当路由url位于主页上时,调用索引函数,该字符串的内容将在浏览器上输出。


如下执行效果:
上面的return语句也可以加入Html代码,这样就可以输出某种格式来控制网页的内容,修改如下:


@app.route('/')defindex():return'
 welcometomywebpage!
 输出语句测试
'
再重新运行py文件,浏览器刷新一下就显示为:


然而,在返回语句中添加一长串html代码显然是不合适的。所以我们需要使用flask库中的Jinja2模板引擎,调用flask模块中的render_template方法传入静态html文件,并将数据传输到html文件中进行显示。让我们修改上面的案例代码:


fromflaskimportFlask,render_template#导入render_template模块app=Flask(__name__)@app.route('/')defindex():returnrender_template("index.html")#调用render_template函数,传入html文件参数if__name__=="__main__":app.run(port=2020,host="127.0.0.1",debug=True)


如果这样做,pycharm终端将提示一个错误,因为找不到index.html文件。当使用这个模板函数时,默认情况下,flask框架在项目文件夹下的模板文件夹中查找html文件。因此我们需要先新建一个templates文件夹,然后在里面新建一个html文件,项目结构及内容参考如下:


这样,我们就准备好了,然后启动web服务。浏览器直接刷新后,会获得以下效果:

如果想通过rendertemplate方法传输数据,在html文件中显示出来,一方面需要在render_template函数中加入数据参数,如data=msg,这里msg为参数值,data为参数名。在html文件中就需要使用jinjia2模板里的数据控制语法:

{% python语句  %}
{{ 变量 }}

我们继续将上述案例代码修改一下,来测试一下数据传输效果:

from flask import  Flask,render_template
app=Flask(__name__)

@app.route('/')
def index():
    msg="my name is caojianhua, China up!"
    return render_template("index.html",data=msg)  #加入变量传递

if __name__=="__main__":
    app.run(port=2020,host="127.0.0.1",debug=True)

然后在index.html中修改:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>welcome to 2020</title>
</head>
<body>
   welcome to my webpage
  <hr>
   <p>这是采用render_template模板方法获得的内容:</p>
   <br>
  {{data}}  #显示出传递过来的变量内容
</body>
</html>

保存后重新启动web服务,然后浏览器上刷新一下(默认浏览器地址栏还是127.0.0.1:2020访问首页):

如果要在这个页面上添加图片或者css和js文件,需要使用flask框架默认设置的静态目录模式,即把这些图片、css和js文件存储在项目目录下的静态目录中,然后使用routing指向它们。因此,首先在项目目录下创建一个静态文件夹,然后在其中创建一个img目录,并保存一张名为main.jpg的图片。在页面中使用的时候方式如下:


<img src="{{ url_for('static',filename='img/main.jpg')}}" alt="">
使用jinjia2模板的url_for路由功能,指定在静态目录下,文件名指向具体图片。

相关文章