Flask的开始

阅读: 评论:0

Flask的开始

Flask的开始

Flask介绍

框架:对于同一类型的项目共性代码的封装,称为框架。

Flask 是python开发编写的web框架,相较其他框架,Flask更加的轻量,灵活,但是对python代码能力要求高,Flask只提供了最基本web功能,其他功能都需要开发者自己使用python代码实现,所以,Flask项目质量是由开发者的能力决定的,但是,随着版本迭代,好多社区,组织,三方开发出了公共的Flask插件,开发者不再需要编写好多功能,转为,下载,安装使用三方插件。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WH4GM6YL-1605959492028)(G:Pythontypora图片image-20201121111259218.png)]

Flask的开始

下载

python=3.7 python的版本

flask=1.1.1 flask的版本

  1. 打开cmd

    国内镜像源的地址:
    清华大学:
    阿里云:/
    豆瓣:/
    
    pip install flask=1.1.1 -i   # 使用清华源
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7y1q4swU-1605959492031)(G:Pythontypora图片image-20201121111751361.png)]

使用flask编写helloword

  1. 配置pycharm

    1. 选择file里面的setting,下面的project:项目名,Project Interpreter

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-46HnGG88-1605959492033)(G:Pythontypora图片image-20201121111956698.png)]

    ​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NS8s0mzZ-1605959492036)(G:Pythontypora图片image-20201121112230875.png)]

    ​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ndHmyA6r-1605959492038)(G:Pythontypora图片image-20201121112258022.png)]

    1. 找到自己创建的沙箱环境的python解释器

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mBNqfjLX-1605959492040)(G:Pythontypora图片image-20201121112342200.png)]

    1. 编写代码

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NWk3XxS9-1605959492041)(G:Pythontypora图片image-20201121112705682.png)]

    2. flask实现的原理

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-56BCFlhY-1605959492043)(G:Pythontypora图片image-20201121112750327.png)]

    3. 代码解析

      main.py

      from flask import Flaskapp = Flask(__name__) #创建web服务器实例
      #__name__: 内置的python方法,用来标识python文件的执行状态#直接执行当前文件  __name__ = '__main__'#被导入执行  __name__ = "文件的相对路径"#执行的优先级#用户通过url来告诉浏览器取哪里获取资源,url(统一资源定位符)
      &#ute("/index") #装饰器,用来指定路由 ,基于当前web服务器实例创建路由和对应的视图
      def index(): #视图函数return "<p style= 'color: red'>hello world</p>"&#ute("/hello") #装饰器,用来指定路由
      def hello():return "<h1 style= 'color: red'>hello world</h1>"if __name__ == '__main__':#通常网站的页面需要放到服务器上,用户无法直接双击打开页面,#所以有网站服务器的概念:# apache(比较老,比较成熟web服务器 LAMP(Linux Apache Mysql PHP))# nginx (比较新,比较成熟web服务器 LNMP(Linux nginx Mysql PHP))# python自带轻量级web服务器,在学习之初直接使用。# app.run() #启动服务器app.run(host="10.10.18.74",port=8000,debug=True)#host 主机#post 端口#debug 调试
      
  2. 代码编写的步骤

    1. 导入flask模块:form flask import Flask

    2. 创建一个服务器实例:app = Flask(_name_)

    3. 指定路由:&#ute("/路由")

      • 路由:是指向视图函数的的标志,用户通过url访问,服务器会从url中获取路由.

      • url(统一资源定位符):比如:.jpg.120x160.jpg

        • 协议头:
        • 主机部分: image1.ljcdn(也可以是一个ip:端口地址如:127.0.0.1:8000)
          • 端口:每个ip都有0-65535给端口,前1000个用于系统服务,比如:http协议是80端口,https协议是443,mysql:3306,每个ip的对应端口同时支持一个服务.
        • 路由部分:
          • 代表资源在这个服务器的位置
          • 对于视图函数,代表视图函数的路由
          • 对于静态资源代表放在服务器当前web服务的根目录的位置。
            • usercenter/images/uc_ehr_avatar/92479a95-3fcb-479c-acfa-643b2b147e53.jpg.120x160.jpg
          • 根目录:网络服务器启动的目录就是根目录
    4. 编写视图函数

      视图函数:一个实现功能的函数,它接收Web请求并返回Web响应

    5. 启动web服务器,实质上就是在服务器指定目录下,启动服务,将这个目录作为根目录按照http协议规则解析给用户。

      app.run() # 启动服务器

      ​ host:设置服务器的ip

      ​ port:服务器的端口

      ​ debug:调试模式

    6. 执行的步骤

      1. 启动脚本
      2. 在浏览器上给定url(ip:端口/路由)

flask路由操作

在web开发当中,可以通过路由修改查询的内容,因为路由本身就可以把接收的数据当中的一部分传递给视图函数。

&#ute("/hello/<name>/")
def hello(name):result = "<h1>hello world,I am {}</h1>".format(name)return result
&#ute("/say_hello/")
def say_hello():result = """<ul><li><a href="/hello/老王/">老王</a></li><li><a href="/hello/老李/">老李</a></li><li><a href="/hello/老张/">老张</a></li><li><a href="/hello/老赵/">老赵</a></li></ul>"""return result
  1. 在路由上,有<>包围的部分,匹配到的内容会作为参数传递给视图函数
  2. 视图函数需要有和路由<>内名称对应的形参进行参数接收
  3. 接收到的参数可以在函数内部使用
  4. 可以通过页面的<a>标签的href属性指向目的路由去跳转页面

路由给实际上给参数的类型也做了划分

类型描述
string匹配字符串内容,也是默认类型
int匹配整数类型
float匹配小数类型
path匹配路径
&#ute("/hello/<path:name>/")
def hello(name):result_dict = {"老王": {"like": "吃"},"老李": {"like": "喝"},"老张": {"like": "睡"},"老赵": {"like": "跑"},}like = (name)if like:like = ("like")result = "<h1>{} 的爱好是 {}</h1>".format(name,like)return result

jimjia2模板技术

jinjia2模板技术来源与django的模板技术,但目前发展超过了django的模板系统。

jinjia2 负责以下任务:

加载HTML

  1. 在main文件同级目录创建templates目录

  2. 在目录当中编写HTML文件

  3. 导入render_template方法

  4. 使用render_template方法加载HTML文件

  5. 将加载的内容返回

    from flask import Flask
    from flask import render_template
    app = Flask(__name__)#web后端把HTML文件认为是模板文件,
    #Flask 默认查找当前目录下templates目录中的HTML&#ute("/")
    def index():return render_template("index.html")if __name__ == '__main__':app.run(host = "0.0.0.0",port = 80,debug = True)
    

HTML数据渲染

就是将python视图函数中的数据传递到HTML中去

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q0xF0nEQ-1605959492045)(G:Pythontypora图片image-20201121191224633.png)]

前端展示的效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UM2wZAO6-1605959492046)(G:Pythontypora图片image-20201121191249222.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PMjgKYnp-1605959492048)(G:Pythontypora图片image-20201121192532345.png)]

jinja2不但可以将数据传递到前端页面上,还具备一套完整的前端渲染方法。

总体,jinja2将模板语法分为三类

语法描述
{{ }}变量
{% %}标签
{{ | }}过滤器

变量可以接收视图函数传递过来的对象,并且调用他们的方法

标签具备一部分python的语法,可以实现加强的效果

循环 for

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><!--<h1>这个是一个纯粹的HTML</h1><h1>{{ name }} {{ age }}</h1><h1>{{ project.upper() }}</h1><h1>{{ project.split('p') }}</h1>-->{{ name_list }}<ul>{% for i in name_list %}<li><a href="{{ i }}">{{ i }}</a></li>{% endfor %}</ul>
</body>
</html>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9D4P9M5i-1605959492050)(G:Pythontypora图片image-20201121194314343.png)]

&#ute("/book_list/")
def book_list():book_list = [{"book_name": "", "book_type": "", "author": "", "public":""},{"book_name": "", "book_type": "", "author": "", "public": ""},{"book_name": "", "book_type": "", "author": "", "public": ""},{"book_name": "", "book_type": "", "author": "", "public": ""},{"book_name": "", "book_type": "", "author": "", "public": ""},]return render_template("index.html",**locals())

图书案例

  • 前端部分

    <!DOCTYPE html>
    <html lang="en">
    <head><meta charset="UTF-8"><title>Title</title>
    </head>
    <body><table width="700px"><tr><th>书名</th><th>作者</th><th>出版社</th><th>类型</th></tr>{% for book in books %}<tr align="center" height="30px"><td>{{ book.book_name }}</td><td>{{ book.author }}</td><td>{{ book.public }}</td><td>{{ book.book_type }}</td></tr>{% endfor %}</table>
    </body>
    </html>
    
  • 后端部分

    from flask import Flask
    from flask import render_template
    app = Flask(__name__)&#ute("/book_list/")
    def book_list():books = [{"book_name": "《西游记》", "book_type": "必读", "author": "朋朋", "public":"延边出版社"},{"book_name": "《奥特曼大战小矮人》", "book_type": "选读", "author": "森森", "public": "新华出版社"},{"book_name": "《卖火柴的葫芦娃》", "book_type": "必读", "author": "迅迅", "public": "西安交大出版社"},{"book_name": "《天线宝宝》", "book_type": "选读", "author": "安安", "public": "清华大学出版社"},{"book_name": "《桃花怪大战菊花侠》", "book_type": "必读", "author": "框框", "public": "中公出版社"}]return render_template("book_list.html",**locals())if __name__ == '__main__':app.run(host = "0.0.0.0",port = 80,debug = True)
    












本文发布于:2024-02-08 19:39:20,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170739239668364.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:Flask
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23