在app1.py文件中
from flask import Flask, request, redirect,url_for from flask import render_template import json app=Flask(__name__) users=[] @app.route('/',endpoint='index') # endpoint 和url_for 一起用 endpoint给这个路由起一个别名,url_for根据别名获取路由 def index(): return render_template('index.html') @app.route('/register') def register(): r=render_template('register.html') # 默认从模板文件夹中找文件 print(r) return r @app.route('/register2',methods=['GET','POST']) # methods=['GET','POST'] 如果没有这个默认的只有get,没有post def register2(): # 获取页面提交的内容 if request.method=='POST': print(request.full_path) #/register2?username=zhao&address=山西# print(request.path) # /register2 # print(request.args) # dict类型 只能获取get请求的 # print(request.args.get('username')) # 获取值 # print(request.args.get('address')) print(request.form) # 如果请求方法是post 则需要通过request.form取值 print(request.form.get('username')) print(request.form.get('address')) username=request.form.get('username') username2=request.form.get('username2') address=request.form.get('address') if username==username2: user={'username':username,'address':address} users.append(user) return redirect(url_for('index')) # redirect 重定向 else: return '不一样' return '不是post' @app.route('/show') def show(): j_str=json.dumps(users) return j_str @app.route('/test') def test(): url=url_for('index') # 路径反向解析 print(url) return 'test' if __name__=='__main__': print(app.url_map) # 路由规则表 app.run() """ 视图函数的返回值: response响应: 1.str 自动转成response对象 2.dict json 3.response对象 response对象 4.make_response() response对象 5.redirect() 重定向 302状态码 6.render_template() 模板渲染+模板 """ 在index.html文件中
首页 注册
登录
展示
在register.html文件中
模板语法用户注册页面 京东注册页面 {#如果是表单提交则必须在表单的元素上添加name属性#}
""" 视图函数的返回值: response响应: 1.str 自动转成response对象 2.dict json 3.response对象 response对象 4.make_response() response对象 5.redirect() 重定向 302状态码 6.render_template() 模板渲染+模板 模板:[网页] 模板的语法: 1.在模板中获取view中专送的变量值:{{变量名key}} render_template('模板名字',key=value,key=value) name='小明' # str age=18 # int friends=['1号','2号','3号'] # list dict1={'gift':'大手镯','gift1':'鲜花','gift2':'费列罗'} # dict # 创建对象 girlfriend=Girl('美美','安徽黄山') 自定义的类构建的类型:Girl对象 模板: {{list.0}} 同 {{list[0]}} {{dict.key}} 同 {{dict.get(get)}} {{girl.name}} 同 {{对象.属性}} 2. 控制块: {% if 条件 %} {% endif %} {% if 条件 %} 条件为true {% else %} 条件为False {% endif %} {% for 变量 in 可迭代对象 %} for循环要做的任务 {% endfor %} 可以使用loop变量 loop.index 序号从1开始 loop.index0 序号从0开始 loop.revindex 序号倒着开始最后为1 loop.revindex0 序号倒着开始最后为0 loop.first 布尔类型 是否是第一行 loop.last 布尔类型 是否是第二行 3.过滤器 过滤器本质是函数 模板语法中过滤器: {{变量名|过滤器(*args)}} {{变量名|过滤器}} 常见的过滤器: 1. safe:禁用转译 msg='520快乐!' return render_template('show_2.html',girls=girls,users=users,msg=msg) 不想让它转译: {{ msg |safe }} 2.capitalize: 单词的首字母大写 {{ n1|capitalize }} 3.lower 和 upper 大小写的转换 4.title 一句话中的首字母大写 msg='She is a beautiful girl' {{mag|title}} 5.reverse 翻转 {{n1|reverse}} 6.format 格式化 {{ '%s is %d years old'| format('lili',18) }} 7.truncate 字符串截断 list的 *** 作: {{ girls|first }} {{ girls|last }} {{ girls|length }} {#{{ girls|sum }}整形的计算#} {{ [1,3,5,7,8]|sum }} {{ [1,6,5,4,8]|sort }} dict: {% for v in users.0.values() %} 获取值{{ v }}
{% endfor %} {% for k,v in users.0.items() %} 获取键值{{ k }}--{{ v }}
{% endfor %} {% for k in users.0.keys() %} 获取键{{ k }}
{% endfor %} """
在app12.py文件中
from flask import Flask,request,render_template app=Flask(__name__) class Girl: def __init__(self,name,addr): self.name=name self.gender='女' self.addr=addr def __str__(self): return self.name @app.route('/show') def show(): name='小明' # str age=18 # int friends=['1号','2号','3号'] # list dict1={'gift':'大手镯','gift1':'鲜花','gift2':'费列罗'} # dict # 创建对象 girlfriend=Girl('美美','安徽黄山') return render_template('show.html',name=name,age=age,friends=friends ,dict1=dict1,girl=girlfriend) if __name__=='__main__': app.run()
在show.html文件中
展示 用户信息展示用户名是:{{ name }}--{{ age }}
{{ friends.0 }}
{{ friends[1] }}
{{ friends[:1] }}
{{ dict1.gift1 }}--{{ dict1.get('gift') }}
{{ girl.gender }}--{{ girl.name }}--{{ girl.addr }}
在app13.py文件中
from flask import Flask,request,render_template app=Flask(__name__) app.config.from_object('settings') @app.route('/show1') def show1(): girls=['如花','凤姐','1松松','孙孙','1玲玲','云云'] users=[ {'username':'zhansan1','password':'1231','addr':'北京','phone':'13926575656'}, {'username':'zhansan2','password':'1232','addr':'上海','phone':'13923467576'}, {'username':'zhansan3','password':'1233','addr':'广州','phone':'13923477777'}, {'username':'zhansan4','password':'1234','addr':'深圳','phone':'13923458888'}, {'username':'zhansan5','password':'1235','addr':'杭州','phone':'13923459999'}, ] return render_template('show_1.html',girls=girls,users=users) if __name__=='__main__': app.run()
在show_1.html文件中
演示控制块 .a{ color:red; font-weight: bold; } {#ul....li#} {#ol....li#} {#{{ girls }}#} {% for girl in girls %} {#遍历出来,for的应用#}
- {{ girl }}
{% endfor %}{% for girl in girls %} {#for 和 if 的应用#} {% if girl|length>=3 %} {#如果字数大于等于3#}
{% for user in users %}- {{ girl }}
{#字体变红加粗#} {% else %} {#否则#}- {{ girl }}
{% endif %} {% endfor %}{{ user.username }} {{ user.password }} {{ user.addr }} {{ user.phone }} {% endfor %} {% for user in users %} {##} {{ loop.index }} {#序号从1开始#} {# {{ loop.index0 }}#} {#序号从0开始#} {# {{ loop.revindex }} {#序号倒着开始#} {{ user.username }} {{ user.password }} {{ user.addr }} {{ user.phone }} {% endfor %}
在settings.py文件中
ENV='development' DEBUG=True
在app14.py文件中
from flask import Flask,request,render_template app=Flask(__name__) app.config.from_object('settings') @app.route('/show1') def show1(): girls=['如花','凤姐','1松松','孙孙','1玲玲','云云'] users=[ {'username':'zhansan1','password':'1231','addr':'北京','phone':'13926575656'}, {'username':'zhansan2','password':'1232','addr':'上海','phone':'13923467576'}, {'username':'zhansan3','password':'1233','addr':'广州','phone':'13923477777'}, {'username':'zhansan4','password':'1234','addr':'深圳','phone':'13923458888'}, {'username':'zhansan5','password':'1235','addr':'杭州','phone':'13923459999'}, ] girls.append('zhangsan') msg='520快乐!' n1='hello' return render_template('show_2.html',girls=girls,users=users,msg=msg,n1=n1) if __name__=='__main__': app.run()
在show_2.html文件中
过滤器的使用 当前用户共:{{ girls |length}}人 {#过滤器转译#} {{ msg |safe }} {{ n1|capitalize }} {{ n1|upper }} {{n1|reverse}} {{ '%s is %d years old'| format('lili',18) }} {{ 'hello world'| truncate(5) | upper }} {#列表过滤器的使用#} {{ girls|first }}
{{ girls|last }}
{{ girls|length }}
{#{{ girls|sum }}整形的计算#} {{ [1,3,5,7,8]|sum }}
{{ [1,6,5,4,8]|sort }}
{{ users.0 }}
{% for v in users.0.values() %}{{ v }}
{% endfor %} {% for k,v in users.0.items() %}{{ k }}--{{ v }}
{% endfor %} {% for k in users.0.keys() %}{{ k }}
{% endfor %}
在settings.py文件中
ENV='development' DEBUG=True模板 自定义过滤器
过滤器本质是函数 1.通过flask模块中的add_templete_filter方法 a.定义函数,带有参数和返回值 b.添加过滤器 app.add_template_filter(function,name='') c.在模板中使用:{{变量|自定义过滤器}} 2.使用装饰器完成 a.定义函数,带有参数和返回值 b.通过装饰器完成,@app.template_filter('过滤器名字')装饰步骤-的函数 c.在模板中使用:{{变量|自定义过滤器}}
在app15.py文件中
from flask import Flask,render_template import settings app=Flask(__name__) app.config.from_object(settings) @app.route('/') def hello_world(): msg='hello everyone hello world' li=[3,7,9,1,5] return render_template('define_filter.html',msg=msg,li=li) # 过滤器本质是函数 # 第一种方式 def replace_hello(value): print('----',value) value=value.replace('hello','') print('====',value) return value.strip() # 替换的结果返回 app.add_template_filter(replace_hello,'replace') # 第二种方式 装饰器 @app.template_filter('listreverse') def reverse_list(li): temp_li=list(li) temp_li.reverse() return temp_li if __name__=='__main__': app.run()
在define_filter.html文件中
复用自定义过滤器 {{ msg }} {{ msg| replace }} {{ li }} {{ li|listreverse }}
模板继承 include 宏 模板继承: 需要模板继承的情况: 1.多个模板具有完全相同的顶部和底部 2.多个模板具有相同的模板内容,但是内容中部分不一样 3.多个模板具有完全相同的模板内容 标签: {% block 名字 %} {% endblock %} 1.定义父模块 2.子模板继承父模板 步骤: 父模板: 1.定义一个base.html的模板 2.分析模板中那些是变化的比如:{% block title %}父模板的title{% endblock %} 对变化的部分用block进行“预留位置”也称作:挖坑 3.注意:样式和脚本 需要提前预留 {% block mycc %}{% endblock %} {% block myjs %}{% endblock %} 子使用父模板: 1.{% extends '父模板的名称'%}将父模板继承过来 2.找到对应的block(坑)填充,每一个block都是有名字的。 include:包含 在A,B,C页面有共同的部分,但是其他页面没有这部分。 这个时候考虑使用include 步骤: 1.先定义一个公共的模板部分,xxx.html 2.谁使用则include过来,{% include '文件夹/xxx.html'%} 宏:macro 1.把它看做是jinja2的一个函数,这个函数可以返回一个HTML字符串 2.目的:代码可以复用,避免代码冗余 定义两种方式: 1.在模板中直接定义: 类似: macro1.html 中定义方式 2.将所有宏提取到一个模板中:macro.html 谁想使用谁导入: {% import 'macro.html' as xxx %} {{ xxx.宏名字(参数)}} 总结: 变量:{{变量}} 块: {% if 条件%}.....{% endif %} {% for 条件%}.....{% endif %} {% block 条件%}.....{% endblock %} {% macro 条件%}.....{% endmacro %} {% include''%} 包含 {% import''%} 导入宏 {% extends''%} {{url_for('static',filename='')}} {{hongname(XXX)}}模板继承、include、宏
base.html文件和index.html文件是模板继承
header.html文件和index.html文件是include
macro.html文件和macro1.html和macro2.html是宏
app16.py文件是公共部分
在app16.py文件中
from flask import Flask,render_template import settings app=Flask(__name__) app.config.from_object(settings) @app.route('/base') def load_base(): return render_template('base.html') @app.route('/') def index(): return render_template('index.html') @app.route('/welcome') def welcome(): return render_template('welcome.html') @app.route('/macro') def use_macro(): return render_template('macro/macro1.html') @app.route('/macro1') def use_macro1(): return render_template('macro/macro2.html') if __name__=='__main__': app.run()
在macro.html文件中
{#定义宏#} {% macro form(action,value='登录',method='post') %} {% endmacro %} 上面这是用宏封装好的宏,可以调用
在macro1.html文件中
宏的定义 {#定义宏#} {% macro form(action,value='登录',method='post') %} {% endmacro %} {#调用宏#} {{ form('/') }}
在macro2.html文件中
宏的使用2 {% import 'macro/macro.html' as func %} {{ func.form('/welcome',value='注册') }} {% set username='zhangsan' %} # set 声明 是全局变量 {{ username }} {% with num=1000 %} # with 声明的是局部变量 {{ num }} {% endwith %} {{ num }}
调用macro文件中的宏form,{% import 'macro/macro.html' as func %}是把macro文件中的宏导过来,'/welcome',value='注册'是传的参数
在welcome.html文件中
欢迎页面 {% include 'common/header.html' %} 在header.html文件中
头部
在base.html文件中
{% block title %}父模板的title{% endblock %} {#标记#}#head{ height:50px; background-color: bisque; } #head ul{ list-style: none; height: 50px; } #head ul li{ float:left; width: 100px; text-align: center; font-size: 18px; height: 50px; line-height: 50px; } #middle{ height: 900px; background-color: azure; } #foot{ height: 50px; line-height: 50px; background-color: darkseagreen; } {% block mycc %}{% endblock %} {#标记#} {% block middle %} {#标记#} {% endblock %} 我是底部 {% block myjs %} {#标记#} {% endblock %}
- 首页
- 秒杀
- 超市
- 图书
- 会员
在index.html文件中
{% extends 'base.html' %} {% block title %} 首页 {% endblock %} {% block mycc %}#middle{ background-color: deeppink; color: white; font-weight: bold; } .div1{ width: 33%; height: 500px; float: left; border: 1px solid red; } {% endblock %} {% block myjs %} {% endblock %} {% block middle %} { url_for('static',filename='images/43.jpeg') }}" alt=""> {% endblock %} 43.jpeg是张图片
在style.css文件中
#d1{ background-color:aquamarine; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)