【非常详细】Flask开发基础与入门

🌵Flask系列文章

🌴欢迎点赞评论学习交流~

🌱各位看官多多关注哦😘~

🍀开整!!!

目录


前言

        众所周知,Flask框架是python的一个轻量级微型框架,使用它来开发是非常的方便的。所以,最近花了一点时间研究了一下,基础入门的内容还是挺容易的,我会继续学习关于Flask的应用,接下来的我把关于学习Flask的笔记分享给大家,希望大家多点赞的➕关注的➕评论~

🍉Flask开发基础与入门 

基本内容是以下几个方面,接下来我会一一介绍。

  • web开发基础

  • Flask中的Hello World

  • Flask中的模板

  • Flask的消息提示与异常处理

 🌴web开发基础

我们知道web开发涉及了前端和后端,前端方面我们要了解以下几种技术。

  • HTML
  • CSS
  • Javascript

了解HTML的基本使用,能够使用css样式像浮动之类的,熟悉javascipt的基本语法。

前端常用的库与框架

  • Bootstrap

  • jQuery

  • ANGULARJS

  • React

这些框架可以自行去了解~

MVC设计模式

  • View(视图)

  • Controller(控制器)

  • Model(模板)

Flask的设计模式为MVC模式,视图负责前端展示;控制器负责转发请求,对请求进行处理;模板负责数据相关逻辑,编写程序应有的功能,数据库的连接等等。

🍉Flask中的Hello World

  • Flask应用的基本构成

  • Flask的路由

  • Flask的反向路由

一、简单的flask框架

from flask import Flask
#给Flask一个实例化对象,其中__name__入参是你的模块名或者包名,Flask应用会根据这个来确定你的应用路径以及静态文件和模板文件夹的路径
app = Flask(__name__)
#路由
@app.route('/')
def hello_world():
   return 'Hello World!'
#运行
if __name__ == '__main__':
    app.run()

 运行打开网页你就可以看到Hello World!

二、flask框架的路由methods方法,默认为GET

from flask import Flask
app = Flask(__name__)
​
@app.route('/user',methods=['POST'])
def hello_user():
    return 'hello user'

这里我们可以用到一个工具来调试: PostWoman Http接口调试工具

三、flask框架参数传递的两种方法

  1. 在路由中传递参数

  2. 在request实例对象中获取参数

在路由中传递参数

from flask import Flask
app = Flask(__name__)
​
@app.route('/users/<id>')
def users_id(id):
    return 'users id:' + id
#访问127.0.0.1/users/12334
#id为12334

 在路由中传参我们访问的时候的是“/参数"

在request实例对象中获取参数

from flask import Flask,request
app = Flask(__name__)
​
@app.route('/query_id')
def query_id():
    id = request.arg.get('id')
    return 'query id:' + id
#访问127.0.0.1/query_id?id=12334

request实例对象传参访问的时候是”?参数=xxxx“ 

四、flask框架的反向路由

from flask import Flask,url_for
app = Flask(__name__)
​
@app.route('/query_url')
def query_url():
    return 'query url:' + url_for('users_id')

 反向路由用的是url_for('返回的函数')

🍉Flask的模板

了解完路由的基本使用后,我们说说Flask的模板~

基本内容

  • 模板的简单使用

  • 条件语句

  • 循环语句

  • 模板的继承

一、模板的简单使用

from flask import Flask,render_template
app = Flask(__name__)
​
@app.route('/')
def hello_world():
    return render_template('index.html')

创建一个文件夹用来存放index.html静态模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>template</title>
</head>
<body>
<h1>hello world!</h1>
</body>
</html>

这里我们可以看到和hello world!和之前在学简单的Hello world!效果一样,不过这里我们用的是一个html文件来展示的。

使用模板语法

from flask import Flask,render_template
app = Flask(__name__)
​
@app.route('/')
def hello_world():
    content = 'hello,world!'
    return render_template('index.html',content=content)

静态文件index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>template</title>
</head>
<body>
<h1>{{content}}</h1>
</body>
</html>

这里看到的也是hello world!只不过我们将静态文件的内容藏起来了,通过后端返回的内容再显示出来,用的是模板语法,两种方法在前端显示的都一样。但是更加复杂的如何展示呢?我们写一些简单的逻辑语句。

将需要传递的参数写入models.py

class User:
    def __init__(self,user_id,user_name):
        self.user_id = user_id
        self.user_name = user_name

编写后端flaskapp.py

from flask import Flask,render_template
from models import User
​
app = Flask(__name__)
#引用模板
@app.route('/')
def hello_world():
    content = 'hello world!'
    return render_template('index.html',content=content)
#引用自己写的models.py中的类
@app.route('/user')
def user_index():
    user = User(1,'李明')
    return render_template('user_index.html',user=user)
​
if __name__ == '__main__':
    app.run()

这里我们写了一个函数用来调用models.py中的类,再将它传给前端展示。 

编写user_index.html静态文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>user</title>
</head>
<body>
<h1>hello {{user.user_name}}</h1>
</body>
</html>

user_index.html静态文件文件中我们使用模板语法来获取实例对象。

二、条件语句

如何在模板中使用条件语句呢?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>条件语句</title>
</head>
<body>
    {% if user.user_id == 1 %}
    <h1> Hello {{user.name}}</h1>
    {% else %}
    <h1>This no user!</h1>
    {% endif %}
</body>
</html>

创建info.html静态文件,使用用模板语法if……elseif……

from flask import Flask,render_template
from models import User
app = Flask(__name__)
​
#路由
@app.route('/info/<user_id>')
def info_judge(user_id):
    user = None
    if int(user_id) == 1:
        user = User(1,'李明')
    return render_template('info.html',user=user)

这里我们写了一个函数进行判断如果参数为1,就返回user.user_name;如果不为1,就返回”This no user!“。

三、循环语句

如何在模板中使用循环语句呢?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>循环语句</title>
</head>
<body>
    {% for user in users %}
    <h3>{{user.user_id}}----{{user.user_name}}</h3><br>
    {% endfor %}
</body>
</html>

创建list.html静态文件

from flask import Flask,render_template
from models import User
#路由
@app.route('/list')
def list_range():
    users = []
    for i in range(10):
        user = User(i,'学'+str(i))
        users.append(user)
     return render_template('list.html',users=users)    

创建flaskapp.py,引入循环模板语法

四、模板的继承

模板的继承是什么?我们会发现有一些网页的有些部分是不变的,当跳转相同网页的时候只有中间部分会改变,这种效果该如何展现出来呢?这就要使用到模板的继承。接下来我将给个例子说明这个问题。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>模板的继承</title>
</head>
<body>
    <div>
        Header 欢迎光临!
    </div>
    {% block content %}
    {% endblock %}
    <div>
        Footer 欢迎下次再来!
    </div>
</body>
</html>

创建base.html

{% extend block %}
    <h3>{{content}}</h3>
{% endblock %}

创建one_page.html

{% extend block %}
    <h3>{{content}}</h3>
{% endblock %}

创建secend_page.html

from flask import Flask,render_template
​
#第一页路由
@app.route('/one_page')
def one_page():
    content = '这是第一页!'
    return render_template('one_page.html',content=content)
#第二页路由
@app.route('/secend_page')
def secend_page():
    content = '这是第二页!'
    return render_template('secend_page.html',content=content)

创建flaskapp.py

运行flaskapp.py我们发现改变url路径(/one_page,secend_page)只有中间部分会发生改变。

🍉Flask消息提示与异常捕获

基本内容

  • 消息提示

  • 异常捕获

  • 异常处理

🌴Flask的消息提示

问题引出:我们在登录一个网站的时候,第一栏是账号,第二栏是密码,这个是最基本的登录方式,有的可能会加上验证码。当我们什么都不输入时,点击登录按钮,网页会提示“请输入账号“;当我们输入账号时,点击登录,网页会提示”请输入密码“;当我们输入错误的账号密码时,网页会提示”您输入的密码或账号有误“;当我们输入正确的账号密码时,网页自动跳转到登录后的页面。这四种消息提示是我们登录遇到过的最基本的情况,如何用Flask的消息提示把它展示出来呢?接下来我将用代码来展示这四种消息提示。

from flask import Flask,render_template,flash,request
app = Flask(__name__)
#对flash的内容加密
app.secret_key = '123'
#路由
@app.route('/login',methods=['POST'])
def login():
    #获取表单上传的数据
    form = request.form
    username = form.get('username')
    password = form.get('password')
    #进行判断
    if not username:
        flash("亲,请输入账号")
        return render_template("index.html")
    if not password:
        flash("亲,请输入密码")
        return render_template("index.html")
    if username == "xiaojiu" and password == "12345":
        flash("login success")
        return render_template("index.html")
    else:
        flash("亲,您输入的账号或密码有误!")
        return render_template("index.html")
#运行
if __name__=="__main__":
    app.run()

flaskapp.py

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Flask消息提示与异常捕获</title>
</head>
<body>
<h1>Login</h1>
    <form action="/login" method="post">
        <input type="text" name="username" placeholder="账号"><br />
        <input type="password" name="password" placeholder="密码" style="margin-top:10px"><br />
        <input type="submit" value="Submit" style="margin-left:50px;margin-top:10px">
    </form>
    <!--这里获取的是一个数组-->
    {{get_flashed_messages()[0]}}
</body>
</html>

index.html文件

🌴Flask的异常捕获以及异常处理

问题提出:当我们访问一个网站的时候不小心把它的路径名称写错了,此时网页将显示的是什么呢?404 notfound?还是别的呢?我们又如何处理这种情况呢?

首先,如果创建网站的人没有设置异常捕获及处理它会出现404;如果处理了的话,那就显示的为处理后的页面。

所以,我们的异常处理也就是对返回的404页面返回我们设置的页面。

from flask import Flask,render_template,abort
app = Flask(__name__)
#异常捕获一
@app.errorhandler(404)
def NotFound():
    return render_template("404.html")
​
#异常捕获二
@app.route('/user/<user_id>')
def user_info(user_id):
    if int(user_id) == 1:
        return render_template("user.html")
    else:
        abort(404)
​
if __name__=="__main__":
    app.run()

 flaskapp.py

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Flask异常捕获与处理</title>
</head>
<body>
    <h2>抱歉,你访问的页面去火星了......</h2><br />
    <h2>请检查你的网址是否输入正确哦!</h2>
</body>
</html>

404.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>User</h1>
​
</body>
</html>

user.html文件 

 🍉结束

        希望大家多多关注,多多支持,感谢!!!

【非常详细】Flask开发基础与入门

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2023年3月5日 上午10:20
下一篇 2023年3月5日 上午10:23

相关推荐