ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

16、类视图和URL的绑定

2022-06-04 02:01:41  阅读:179  来源: 互联网

标签:__ 定义 16 URL app 视图 rule self


之前我们接触的视图都是函数,所以一般简称为视图函数。其实视图函数也可以基于类来实现,类视图的好处是支持继承,编写完类视图需要通过app.add_url_rule(url_rule,view_func)来进行注册。Flask类视图一般分为标准类视图和基于调度方法的类视图。

标准类视图

  1. 定义首页模板 index.html

    {# 首页 #}
    <!DOCTYPE html>
    <html lang="en">
    	<head>
    		<meta charset="UTF-8" />
    		<title>Title</title>
    	</head>
    	<body>
    		这是首页!{{ ads }}
    	</body>
    </html>
    
  2. 定义登录页模板 login.html

    {# 登录页 #}
    <!DOCTYPE html>
    <html lang="en">
    	<head>
    		<meta charset="UTF-8" />
    		<title>Title</title>
    	</head>
    	<body>
    		这是登录页面!{{ ads }}
    	</body>
    </html>
    
  3. 定义注册页模板 register.html

    {# 注册页 #}
    <!DOCTYPE html>
    <html lang="en">
    	<head>
    		<meta charset="UTF-8" />
    		<title>Title</title>
    	</head>
    	<body>
    		这是注册页面!!{{ ads }}
    	</body>
    </html>
    
  4. 定义主程序

    from flask import Flask,render_template,views
    app = Flask(__name__)
    
    # 定义视图类 Ads
    class Ads(views.View):
        def __init__(self):    # 实例化
            super().__init__() # 继承自__init__()方法
            # 添加类中内容
            self.context = {
                'ads': '这是对联广告!'
            }
    
    # 定义类 Index,继承自Ads
    class Index(Ads):
        def dispatch_request(self): # 定义类视图
            return render_template('index.html', **self.context)
    
    # 定义类 Login,继承自Ads
    class Login(Ads):
        def dispatch_request(self): # 渲染模板
            return render_template('login.html', **self.context)
    
    # 定义类 Register,继承自Ads
    class Register(Ads):
        def dispatch_request(self):
            return render_template('register.html', **self.context)
    
    # URL 与视图函数绑定
    app.add_url_rule(rule='/', endpoint='index', view_func=Index.as_view('Index'))
    app.add_url_rule(rule='/login/', endpoint='login', view_func=Login.as_view('login'))
    app.add_url_rule(rule='/register/', endpoint='register', view_func=Register.as_view('register'))
    
    if __name__ == '__main__':
        app.run(debug=True)
    

基于方法的类视图

  1. 定义模板文件 login.html

    <!DOCTYPE html>
    <html lang="en">
    	<head>
    		<meta charset="UTF-8" />
    		<!--设定网页编码-->
    		<title>Title</title>
    		<!--设定网页标题-->
    		<style type="text/css">
    			.div1 {
    				height: 180px;
    				width: 380px;
    				border: 1px solid #8a8989;
    				margin: 0 auto;
    			}
    			.input {
    				display: block;
    				width: 350px;
    				height: 40px;
    				margin: 10px auto;
    			}
    			.button {
    				background: #2066c5;
    				color: white;
    				font-size: 18px;
    				font-weight: bold;
    				height: 50px;
    				border-radius: 4px;
    			}
    		</style>
    	</head>
    	<body>
    		<div class="div1">
    			<form action="login" method="post"> <!-- 表单提交到 login页面 -->>
    				<!--表单开始-->
    				<input
    					type="text"
    					class="input"
    					name="username"
    					placeholder="请输入用户名"
    				/>
    				<input
    					type="password"
    					class="input"
    					name="pwd"
    					placeholder="请输入密码"
    				/>
    				<input
    					type="submit"
    					value="登录"
    					class="input button"
    				/><!--定义登录submit-->
    			</form>
    		</div>
    		<!--表单定义完毕-->
    	</body>
    </html>
    
  2. 定义主程序

    #encoding:utf-8
    from flask import Flask,render_template,request,views #导入相应模块
    app = Flask(__name__) #Flask初始化
    
    # 登录主页
    @app.route('/')    #定义路由
    def hello_world(): #定义视图函数
           return render_template('index.html') #渲染模板
    
    #定义LoginView类
    class LoginView(views.MethodView):
           # 当用户通过get方法进行访问的时候执行get方法,即跳转到主页
           def get(self): #定义get函数
               return render_template("index.html") #渲染模板
    
           # 当用户通过post方法进行访问的时候执行post方法。验证表单,继续在 login页面渲染
           def post(self): #定义post 函数
               username = request.form.get("username") #接收表单中传递过来的用户名
               password = request.form.get("pwd")      #接收表单中传递过来的密码
               if username == 'admin' and password == 'admin': #判断用户名和密码是否为admin
                   return "用户名正确,可以登录!"               #if语句为真的话,返回可以登录信息
               else:
                   return "用户名或密码错误,不可以登录!"        #否则,返回不可以登录信息
    
    
    # 登录结果页。通过add_url_rule添加类视图和/login的映射关系
    app.add_url_rule('/login',view_func=LoginView.as_view('loginview'))
    
    if __name__ == '__main__': #当模块被直接运行时,代码将被运行,当模块是被导入时,代码不被执行
           app.run(debug=True) #开启调试模式
    

参考资料

https://weread.qq.com/web/reader/0a932660718ac6bc0a9702e

标签:__,定义,16,URL,app,视图,rule,self
来源: https://www.cnblogs.com/tiansz/p/16341144.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有