Python Web开发基础

目录

Web标准

Flask简介

路由与视图

通过访问字典元素的方式使用配置文件

通过导入文件的方式使用配置文件

通过导入对象的方式使用配置信息

注册路由

通过add_url_rule ()方法注册路由

URL传递参数的方式

内置转换器

模板与模板引擎Jinja2

模板变量

过滤器

内置过滤器

宏的定义

消息闪现

模板继承

数据库的增删查改

添加数据

更新数据

查询数据

删除数据


Web标准

前端则指的是直接与用户接触的网页,比如布局、特效、交互 后端指的是程序、数据库和服务器层面的开发

网页部分的标准通过三部分来描述:结构、表现和行为

HTML 用来决定网页的结构和内容;  CSS 用来设计网页的表现形式;    JavaScript 用来控制网页的行为。

发展阶段  静态页面、动态页面、web脚本语言、web框架

常用的脚本语言   Java、c#、php、c++、python、JavaScript

Django几乎所有的功能都帮助开发者写好了,部署网站的时候会导致很多不必要的功能也部署进来。

Flask是一个轻量级的框架,一些核心的功能实现了,但是实现的功能并没有Django那么多

Java框架:ssm和ssh  HTML超文本标记语言是标记语言

组成表单的元素:文本字段、复选框、单选项、按钮、列表和菜单等

Css简介内联样式表、内部样式表、外部样式表

Flask简介

Flask是一个用Python编写的微框架,它可以帮助开发者在短时间内完成一个功能丰富的Web应用程序。

Flask默认依赖两个外部库:Werkzeug WSGI工具包和Jinja2模板引擎,它只保留了Web开发的核心功能,而不包括用户认证、表单验证、发送邮件等其他Web应用程序框架通常包含的功能。

路由与视图

路由是一种Web框架中应用的技术,用于帮助用户直接根据URL访问某个页面,而无须再从主页导航到这个页面。

通过访问字典元素的方式使用配置文件

若希望一次修改多个配置项,则可以调用flask.Config从父类继承的update()方法实现。例如,通过为Flask类的对象app设置配置项TESTING和SECRET_KEY,从而为程序启用测试模式以及设置密钥,具体代码如下所示。

app.config.update(

TESTING=True,

SECRET_KEY=b'_5#y2L"F4Q8z\n\xec]/')

通过导入文件的方式使用配置文件

flask.Config类中提供了一些从文件中导入配置项的方法from_file():从指定的文件中导入配置项,并更新配置项的值。

from_pyfile():从py文件中导入配置项,并更新配置项的值。

# 通过from_file()方法从config.json文件中导入配置项

import json

app.config.from_file("config.json", load=json.load)

# 通过from_pyfile()方法从config.py文件中导入配置项

app.config.from_pyfile("config.py")

通过导入对象的方式使用配置信息

from_object()方法用于从给定对象中导入配置项,并更新配置项的值。需要说明的是,from_object()方法只会加载Python类中以大写字母命名的属性。如果Python类中有一个@property属性,该类在被传递给from_object()方法之前需要进行实例化。

注册路由

在Flask程序中,浏览器通过URL发送HTTP请求给Web服务器,Web服务器再将HTTP请求转发给Flask程序。Flask程序接收到HTTP请求后,需要知道Flask程序中哪部分代码对这个请求进行处理。为此,Flask程序保存了一个URL与视图函数或类的映射关系,建立映射关系的过程称为注册路由。

通过add_url_rule ()方法注册路由

下面通过示例代码,演示add_url_rule()方法注册路由,使视图函数与URL建立关联。

from flask import Flask

app = Flask(__name__)

def index_new():

    return f'<h1>这是首页!</h1>'

app.add_url_rule(rule='/index', view_func=index_new)

if __name__ == '__main__':

    app.run()

URL传递参数的方式

当调用route()或add_url_rule()方法注册路由时,可以在URL规则字符串中加入尖括号包裹的变量,用于标记URL中动态变化部分的内容,之后将该变量作为参数传递给视图函数。(动态路由)

<variable_name>

variable_name表示变量名。

from flask import Flask

app = Flask(__name__)

@app.route('/<page>')

def page_num(page): 

    return f'当前为第{page}页'

if __name__ == '__main__':

    app.run()

内置转换器

  • @app.route('/index')
    def index():
        if 'username' in session:
            return f'你好:{session.get("username")}'
        return '请登录'
    @app.route('/login', methods=['GET', 'POST'])
    def login():
        if request.method == 'POST':
           session['username']=request.form['username']
            return '登录成功'
        return
            <form method="post">
                <p><input type=text name=username>
                <p><input type=submit value='登录'>
            </form>

实现表现逻辑和业务逻辑分离的效果。

模板与模板引擎Jinja2

它可以生成任何基于文本格式的文件,比如HMTL、XML、CSV 

模板引擎用于识别模板中的特殊语法标记,它会结合请求上下文环境将变量替换为真实的值,生成最终的HTML页面渲染

Flask默认模板引擎是Jinja2,它除了允许在模板中使用变量之外,还允许在模板中使用过滤器、选择结构、控制结构、宏等

模板变量

模板变量是一种特殊的占位符,它用于标识模板中会动态变化的数据,当模板被渲染时,模板引擎将模板中的变量替换为由视图函数传递的真实数据。

{{ variable }}

过滤器

在Jinja2中,过滤器是用于修改或过滤模板变量值的特殊函数,使用过滤器可以获取更精确的数据。

{{ variable|filter(parameter) }}

filter(parameter)表示使用的过滤器,其中parameter表示传递给过滤器的参数,变量名称和过滤器之间使用竖线分隔。一个模板变量可以使用多个过滤器,多个过滤器之间使用竖线分隔。

内置过滤器

通过一个案例分演示内置过滤器的用法。

在app.py文件中,定义视图函数use_of_filters()以及触发该函数的URL规则/filters,在视图函数use_of_filters()中向模板传递不同类型的数据。

@app.route('/filters')

def use_of_filters():

    num = -2.3

    li = [2, 1, 5, 6, 7, 4, 4]

    string = 'flask'

    return render_template('filters.html', num=num, li=li, string=string)

自定义一个实现反转列表元素的过滤器。

def custom_filters(data): 

    return data[::-1]

使用装饰器app.template_filter()可以将自定义过滤器注册到过滤器列表中,template_filter()方法中包含一个可选参数name,该参数表示过滤器的名称,默认值为被装饰的函数名。

宏的定义

宏与Python函数类似,它可以传递参数,但没有返回值,模板中的宏以macro标识开始,以endmacro标识结束。

{% macro 宏的名称(参数列表)%}

    宏内部逻辑代码

{% endmacro %}

多个参数之间使用逗号进行分隔;宏内部可以嵌套使用前文介绍的过滤器、选择结构、循环结构等。

消息闪现

flash()函数和get_flashed_message()函数实现消息闪现

(1)在app.py文件中定义视图函数home_page(),该函数用于判断用户的登录状态。

from flask import Flask, render_template

from flask import flash, redirect, session, request, url_for

app.secret_key = 'Your_secret_key&^52@!'

@app.route('/home')

def home_page():

    username = session.get('username')

    if 'username' in session:

        return render_template('home_page.html', username=username)

    return redirect(url_for('login'))

模板继承

模板继承通过block和extends实现,其中block用于标识与继承机制相关的代码块,extends用于指定子模板所继承的基模板。{% extends 基模板名称 %}必须位于子模板的第一行

数据库的增删查改

from flask import Flask

from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:1234567@127.0.0.1/student'

db = SQLAlchemy(app)

class Student(db.Model):

    sid = db.Column(db.Integer, primary_key=True)

    sname = db.Column(db.String(20), unique=True, nullable=False)

    score = db.Column(db.Float, nullable=False)

添加数据

def hello_flask():

    user1 = Student(sid="221188100101", sname='张三', score=66)

    db.session.add_all([user1, user2, user3])

    db.session.commit()

    return "OK"

更新数据

def hello_flask():

    result = Student.query.filter_by(sname='张三').first()

    print(result.sname)

    result.sname = "张龙"

    db.session.commit()

    return "OK"

查询数据

def hello_flask():

    students = Student.query.all()

    for student in students:

        print(student.sname)

    first_student = Student.query.first()

    print(first_student.sname)

    return "OK"

删除数据

def hello_flask():

    result = Student.query.filter_by(sname='小张').first()

    print(result.sname)

    db.session.delete(result)

    db.session.commit()

    return "OK"

别忘记写 注册路由和app.run

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值