• 初识Flask


    Flask -day01

    特点

      -  短小精悍,可扩展性强的一个web框架。
      -  区别其他任何的框架做了一个上下文管理机制
    

    wsgi

    web服务网关接口,是一套协议,实现协议的模块是  
    依赖wsgi: werkzurg
    

    Flask安装

    pip3 install flask
    

    使用示例

    示例一:
    from werkzeug.wrappers import Request,Response
        @Request.application
        def hello(request):  # 注意一定要写一个request
            return Response('hello world')
        if __name__ == '__main__':
            from werkzeug.serving import run_simple
            run_simple('localhost', 4000, hello)
    示例二:
        from werkzeug.wrappers import Request,Response
        from werkzeug.serving import run_simple
    
        def run(environ,start_response):
            return [b"hello world"]   # 其实和1没有区别
        if __name__ == '__main__':
            run_simple('localhost', 4000, run)
    

    学习flask

    	# 引入flask,flask是一个类
        from flask import Flask
        # 实例化一个类
        # app = Flask('afdsfad')   # 可以传入任何一个字符串,只是给对象起一个名字
        # print(app)
        app = Flask(__name__)  # 这样子写了以后当被导入的时候就是name,当前就是main
        @app.route('/index')  # 路由与视图函数对应
        def index():  # 没有参数
            return 'Hello World'
        # # 启动flask  run就会直接夯住请求了
        # app.run() 
        # 直接基于上面的方式书写的话,在被导入的时候也会执行,但是作为主函数不应该被执行,所以
        if __name__ == '__main__':
            app.run()
    

    通过登录功能学习flask

    视图函数

    from flask import Flask, render_template, request,redirect
    
    # app = Flask(__name__,template_folder=)   # 默认是templates
    app = Flask(__name__)
    @app.route('/login',methods=['GET','POST'])  # method默认是GET
    def login():
        # 特殊的点---请求的东西不是通过参数拿的
        # 需要导入request,通过这个来拿到请求方法
        if request.method == 'GET':
            # return 'Login' ==> HttpResponse
            return render_template('login.html')
        # request.form  # GET  通过form表单提交过来的数据
        # request.args  # POST  通过url传过来的参数
        user = request.form.get('user')
        pwd = request.form.get('password')
        if user == 'mcc' and pwd == '123':
            return redirect('/index')
        # 模板渲染的功能
        # return render_template('login.html', error='用户名或者密码错误')
        return render_template('login.html', **{'error' : '用户名或者密码错误'})
    
    @app.route('/index')
    def index():
        # return '欢迎登录'
        return render_template('index.html')
    
    if __name__ == '__main__':
        app.run()
    

    前端页面的搭建

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <h1>用户登录</h1>
    <form method="post">
        用户名<input type="text" name="user">
        密码<input type="password" name="password">
        <input type="submit" value="提交">{{error}}
    </form>
    </body>
    </html>
    

    思考:我们可以将templates文件修改吗?django中可以修改此名称吗?

    我们可以修改这个路径的名称,只需要指定一下参数就好app = Flask(name,template_folder=) # 默认是templates,将这个东西修改了我们的名字也就变了,django也可以改,配置文件修改一下就好。

    模板语法补充

    	模板语法中后缀名无所谓,其实本质上都是字符串,只不过是长得像HTML,不管任何语言和框架都一样,只不过写其他的东西不提示,所以我们默认就写html结尾
    

    登录页面的路由跳转

        <!DOCTYPE html>
            <html lang="en">
            <head>
                <meta charset="UTF-8">
                <title>Title</title>
            </head>
            <body>
            <h1>欢迎登录</h1>
            <img src="/static/1.jpeg" alt="">   # 我们在这里将名字改了之后发现图片不显示,所以和static的路径无关,是根据static_folder来指定的
            # 前端的前缀是可以修改的,我们可以让他叫任意的名字,那么我们就得通过修改static_url_path=/名字
            </body>
        </html>
    

    配置文件的相关信息

    	def __init__(
            self,
            import_name,  # __name__
            static_url_path=None,  # 就是他,只需要指定这个就好   /前缀名字
            static_folder="static",  # 静态文件的配置,一般情况下都叫static,但是可以通过设置指定
            static_host=None,
            host_matching=False,
            subdomain_matching=False,
            template_folder="templates",  # 模板语法
            instance_path=None,
            instance_relative_config=False,
            root_path=None,
        ): 
    

    总结:

    ​ 所以如果要修改静态文件和模板文件夹的名字,你只需要在Flask(name)中指定相应的参数就好

  • 相关阅读:
    python面向对象--元类
    python面向对象--类的装饰器
    python--异常处理
    python面向对象--类的内置函数
    python面向对象--类的内置方法
    关于discuz论坛邮箱配置
    python面向对象--item方法
    python面向对象--包装标准类型及组合方式授权
    python面向对象--反射机制
    python面向对象的三大特征--封装
  • 原文地址:https://www.cnblogs.com/mcc61/p/11408924.html
Copyright © 2020-2023  润新知