框架:对于同一类型的项目共性代码的封装,称为框架。
Flask 是python开发编写的web框架,相较其他框架,Flask更加的轻量,灵活,但是对python代码能力要求高,Flask只提供了最基本web功能,其他功能都需要开发者自己使用python代码实现,所以,Flask项目质量是由开发者的能力决定的,但是,随着版本迭代,好多社区,组织,三方开发出了公共的Flask插件,开发者不再需要编写好多功能,转为,下载,安装使用三方插件。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WH4GM6YL-1605959492028)(G:Pythontypora图片image-20201121111259218.png)]
python=3.7 python的版本
flask=1.1.1 flask的版本
打开cmd
国内镜像源的地址:
清华大学:
阿里云:/
豆瓣:/
pip install flask=1.1.1 -i # 使用清华源
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7y1q4swU-1605959492031)(G:Pythontypora图片image-20201121111751361.png)]
配置pycharm
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-46HnGG88-1605959492033)(G:Pythontypora图片image-20201121111956698.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NS8s0mzZ-1605959492036)(G:Pythontypora图片image-20201121112230875.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ndHmyA6r-1605959492038)(G:Pythontypora图片image-20201121112258022.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mBNqfjLX-1605959492040)(G:Pythontypora图片image-20201121112342200.png)]
编写代码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NWk3XxS9-1605959492041)(G:Pythontypora图片image-20201121112705682.png)]
flask实现的原理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-56BCFlhY-1605959492043)(G:Pythontypora图片image-20201121112750327.png)]
代码解析
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 调试
代码编写的步骤
导入flask模块:form flask import Flask
创建一个服务器实例:app = Flask(_name_)
指定路由:ute("/路由")
路由:是指向视图函数的的标志,用户通过url访问,服务器会从url中获取路由.
url(统一资源定位符):比如:.jpg.120x160.jpg
编写视图函数
视图函数:一个实现功能的函数,它接收Web请求并返回Web响应
启动web服务器,实质上就是在服务器指定目录下,启动服务,将这个目录作为根目录按照http协议规则解析给用户。
app.run() # 启动服务器
host:设置服务器的ip
port:服务器的端口
debug:调试模式
执行的步骤
在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
路由给实际上给参数的类型也做了划分
类型 | 描述 |
---|---|
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
jinjia2模板技术来源与django的模板技术,但目前发展超过了django的模板系统。
jinjia2 负责以下任务:
在main文件同级目录创建templates目录
在目录当中编写HTML文件
导入render_template方法
使用render_template方法加载HTML文件
将加载的内容返回
from flask import Flask
from flask import render_template
app = Flask(__name__)#web后端把HTML文件认为是模板文件,
#Flask 默认查找当前目录下templates目录中的HTMLute("/")
def index():return render_template("index.html")if __name__ == '__main__':app.run(host = "0.0.0.0",port = 80,debug = True)
就是将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的语法,可以实现加强的效果
<!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小时内删除。
留言与评论(共有 0 条评论) |