web的flask框架记录1

重定向:

  • 301永久性重定向:新网址完全继承旧网址,旧网址的排名等完全清零,如京东的域名,原来的域名不用了,基本就是永久性重定向到新域名。
  • 302临时性重定向:对旧网址没有影响,但新网址不会有排名,比如看一个东西,会转到登录页面。
from flask import Flask,request,url_for,redirect
import config
#重定向代码如下,profile1目录下重定向到login目录下,如果没有传递参数name
@app.route('/login')
def login():
    return 'login page'

@app.route('/profile1')
def profile1():
    name=request.args.get('name')
    url = url_for("login", user="admin")#动态规划url
    #url此时应该是/login?user=admin
    if not name:
        #如果没有name,说明没有登录,重定向到登录页面
        return redirect(url)#重定向,给的是url
    else:
        return name

传递参数:

定义参数

  • 定义参数的方式更利于SEO优化,能够更好的被搜索引擎收录与检索(比如容易被百度蜘蛛爬取),程序健壮性也更高,具体实例如下,就是用的定义参数方式:
  • www.123.com/list/local/123/12
@app.route('/blog/list/<any(python1,flask2,django3):category>')#指定范围内字符串
def bolg_list_with_category(category):
    return "您获取的博客分类为:%s"%category

@app.route('/book/list')
def book_list():
    return "我是博客"

@app.route('/blog/list/<int:user_id>')#用来定义默认值
@app.route('/blog/list/<int:user_id>/<int:page>')#指定范围内字符串
def blog_list1(user_id,page=1):#默认为第一页
    return "您查找的用户为:%s,博客分页为:%s"%(user_id,page)

查询字符串

  • 查询字符串的方式更灵活一些,具体如下:
  • www.123.com/list?local=local&user_id=123&pwd_id=12
@app.route('/blog/list')# 定义参数类型
def bolg_list_detail():
    user_id=request.args.get("user_id",default=1,type=int)
    page=request.args.get("page",default=1)
    return f"您查找的用户为:{user_id},博客分页为:{page}"

请求方式

  • flask默认是get,可以设置成post,put,delete等其他方式,具体设置方式如下
@app.route("/blog/add",methods=['POST'])# 定义参数类型
def bolg_add():
    return "使用POST方法添加博客"


@app.route("/blog/add/post/get",methods=['POST','GET'])# 定义参数类型
def bolg_add_post_get():
    if request.method=='GET':
        return "使用GET方法添加博客"
    else:
        return "使用POST方法添加博客"

jinja模块

变量使用

  • person.name与person[“name”]两种方式都能取到值,不过两种取值方式的顺序不一样,一个是先访问 键 再访问对象属性,如果都没有就返回空,另一个访问方式与之相反
from flask import Flask,request,url_for,redirect,render_template
import config

#app = Flask(__name__,template_folder=r"E:\flask\demo4")#自定义templates路径
app = Flask(__name__)
app.config.from_object(config)

class User:
    def __init__(self,username,email):
        self.username=username
        self.email=email


print(app.config["TOKEN_KEY"])
@app.route('/')
def index():
    return render_template("index.html")



@app.route('/variable')
def variable():
    person={
        "name":"张三",
        "age":18
    }
    user=User("李四","xx@qq.com")
    hobby="游戏"
    contex={
        "hobby1":hobby,
        "person":person,
        "user":user
    }

    #return render_template("variable.html",hobby1=hobby,person=person,user=user)
    return render_template("variable.html",**contex)#变量比较多时可以使用这个方法
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>变量使用</title>
</head>
<body>
<h1>我的兴趣爱好是:{{ hobby1 }}</h1>
<h1>person的姓名是:{{ person.name }},年龄是{{ person["age"] }}</h1>
<p>user的姓名是:{{ user["username"] }},user的邮箱是{{ user.email }}</p>
</body>
</html>

过滤器

#两种定义过滤器方式
# #自定义过滤器格式,时间格式化
# def datetime_format(value,format="%Y年%m%d %H:%M"):
#     return value.strftime(format)
# app.add_template_filter(datetime_format,"dformat")#注册过滤器,第一个参数是函数,第二个参数是过滤器名称
locale.setlocale(locale.LC_CTYPE, 'Chinese')#设置为中文
@app.template_filter("dformat")
def datetime_format(value,format="%Y年%m月%d日 %H:%M"):
    return value.strftime(format)


@app.route("/filter")
def filter_demo():
    user = User("李四sads", "xx@qq.com")
    mytime=datetime.now()
    return render_template("filter.html",user=user,mytime=mytime)

html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>过滤器使用</title>
</head>
<body>
<div>{{ user.username }}/{{ user.username|length }}</div>
<div>{{ mytime|dformat }}</div>
{#
user|length 获取长度
#}
</body>
</html>

出现报格式错误问题:

UnicodeEncodeError: 'locale' codec can't encode character '\u5e74' in position 2: Illegal byte sequence

在python代码中加入即可:

locale.setlocale(locale.LC_CTYPE, 'Chinese')#设置为中文

控制语句

python代码

@app.route("/control")
def control_statement():
    books=[{
        "name":"三国演员",
        "author":"罗贯中",
        "age":100
    },{
        "name":"水浒传",
        "author":"施耐庵",
        "age":19
    },{
        "name":"红楼梦",
        "author":"曹雪芹",
        "age":26
    },{
        "name":"西游记",
        "author":"吴承恩",
        "age":10
    }



    ]
    age=16
    return render_template("control.html",age=age,books=books)

html代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>控制语句</title>
</head>
<body>
{% if age>18 %}
<div>您已成年</div>
{% elif age<18 %}
<div>您未成年</div>
{% else %}
<div>您刚成年</div>
{% endif %}
<table>
<tr>
    <th>序号</th>
    <th>书名</th>
    <th>作者</th>
    <th>价格</th>
</tr>
<tbody>
{% for book in books %}
    <tr>
    <td>{{ loop.index }}</td>
{#   loop函数显示序号     #}
<td>{{ book.name }}</td>
    <td>{{ book.author }}</td>
    <td>{{ book.age }}</td>
    </tr>
    {% else %}
    <td>无数据</td>
{#  没有数据时,显示else后面语句  #}
{% endfor %}
</tbody>
</table>


</body>
</html>

模板结构

模板继承

重复模块可以继承

@app.route("/child1")
def child1():
    return render_template("child1.html")
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}{% endblock %}</title>
</head>
<body>
{% block bo %}
{% endblock %}
</body>
</html>
{% extends "base.html" %}
{% block title %}
我是子模板标题
{% endblock %}

{% block bo %}
你好呀
{% endblock %}

静态文件导入

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{{ url_for('static',filename='css/style.css') }}">
    <script src="{{ url_for('static',filename='js/my.js') }}"></script>
</head>
<body>
<img src="{{ url_for('static',filename='images/zhiliao.png') }}" alt="">
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值