一 .Flask初步使用
1.Flask简介
Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,
其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,
如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器。
werkzeug简介
Werkzeug是一个WSGI工具包,他可以作为一个Web框架的底层库。这里稍微说一下, werkzeug 不是一个web服务器,
也不是一个web框架,而是一个工具包,官方的介绍说是一个 WSGI 工具包,它可以作为一个 Web 框架的底层库,因为它封装好了很多
Web 框架的东西,
例如 Request,Response 等等
flask 特点
1. 短小精悍 可扩展性强 的一个web框架
2. 上下文管理机制
3. 依赖wsgi :werkzurg
2. werkzurg学习(注意下载flask就带这个模块 了解)
示例1:
from werkzeug.wrappers import Request, Response from werkzeug.serving import run_simple def run(environ,start_response): return [b"11111"] if __name__ == '__main__': run_simple('localhost', 4000, run)
实例2:
from werkzeug.wrappers import Request,Response @Request.application def myhello (request): return Response("欢迎啊哈哈哈哈") if __name__ == '__main__': from werkzeug.serving import run_simple run_simple("localhost",4000,myhello)
对类的巩固
class Pro(): def __init__(self,aa,bb): self.cc=aa self.dd=bb print(self.cc) def __call__(self, *args, **kwargs): print(2) aa=Pro(11,22) 类实例化对象会调用__init__方法 aa() 对象加括号 会执行__call__方法 # 11 # 2
3. Flask基本使用
Flask 默认初始化属性
def __init__( self, import_name, static_url_path=None, static_folder="static", static_host=None, host_matching=False, subdomain_matching=False, template_folder="templates", instance_path=None, instance_relative_config=False, root_path=None, ):
示例1:
from flask import Flask app=Flask(__name__) @app.route("/") # 这是根路由 # @app.route("/index/") def myapp(): return "哈哈哈哈哈哈哈" if __name__ == '__main__': app.run()
from flask import Flask
app=Flask(__name__)
# @app.route("/") # 这是根路由
@app.route("/index/")
def myapp():
return "哈哈哈哈哈哈哈"
if __name__ == '__main__':
app.run()
4. Flask基本使用(登录页面)
示例1:
flask
from flask import Flask,render_template,request app=Flask(__name__) @app.route("/") def myapp(): return render_template("login.html") # 注意这里需要自己创建 模板templates render_template:是指渲染模块 这个模板后缀可以不是html # request.args :表示get请求 这里默认是get请求 # request.form :表示post请求 if __name__ == '__main__': app.run()
templates 模板 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>欢迎来到登录页面哈哈哈哈</h1> <form method="post"> <p>用户: <input type="text"></p> <p>密码: <input type="password"></p> <p>用户: <input type="submit" value="登录"></p> </form> </body> </html>
示例2:
flask主启动程序
from flask import Flask,render_template,request,redirect,session #app=Flask(__name__,template_folder="templates",static_folder="static")
app=Flask(__name__)
# template_folder="" 注意可以指定 目标目录 默认是templatse # static_folder="" 注意可以指定静态目录 默认是static # static_url_path="" 注意可以指定静态 路径 别名 static_url_path="/vvvv" app.secret_key="aswdasdsad" # 注意在设置session时要给一个随机字符串 相当于md5加盐 不然会报错 如下:
# RuntimeError: The session is unavailable because no secret key was set. Set the secret_key on the application to something unique and secret. @app.route("/login/",methods=["GET","POST"]) def myapp(): if request.method=="GET": return render_template("login.html") # 默认是get请求 user=request.form.get("user") pwd= request.form.get("pwd") print(user,pwd,"这是获取值") if user=="aaa" and pwd=="111": session["username"]=user # 设置session # return "登录成功了哈哈哈" return redirect("/index/") return render_template("login.html",error="你的用户密码错误了哈哈哈哈") # 方法一传参数 单个形式 # return render_template("login.html", **{"error":"你的用户密码错误了哈哈哈哈"}) # 方法二传参数 字典形式 @app.route("/index/") def index(): user=session.get("username") #获取session值 if not user: return redirect("/login/") return render_template("index.html") if __name__ == '__main__': app.run()
login.html 登录页
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>欢迎来到登录页面哈哈哈哈</h1> <form method="post"> <p>用户: <input type="text" name="user"></p> <p>密码: <input type="password" name="pwd"></p> <p>用户: <input type="submit" value="登录"></p> <p>{{error}}</p> </form> <img src="/static/22.png" style="height:200px; 200px"> </body> </html>
index.html 登录成功跳转页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>欢迎来到主页啊哈哈哈哈哇企鹅请问请问请问请问请问</h1> </body> </html>