python-flask(二)
发布日期:2022-02-01 14:28:05 浏览次数:16 分类:技术文章

本文共 6700 字,大约阅读时间需要 22 分钟。

模板-Template

@app.route('/')def index():	result=render_template('index.html',name='三',age=20)	欢迎{
{
name}}--{
{
age}} #变量占位符 利用模板引擎进行 jinjia2 转换 render-template封装了改引擎

在这里插入图片描述

变量占位符中变量可以是字典,列表

dict1 = {
'name': '文浦', 'age': 20, 'phone': '18866668888'}friends = ['沈腾', '小沈阳', '蔡徐坤', '周琦']girl = Noneresult = render_template('index.html', user=dict1, friends=friends, girl=girl)姓名:{
{
user.name}},年龄:{
{
user.age}},手机号码:{
{
user.phone}}
朋友们:{
{
friends[1]}},{
{
friends[0]}},{
{
friends[2],friends[3]}}

模板语句中的循环

class girlFriend:	def __init__(self,name):		self.name=name		self.gender='女'	def __str__(self):		return self.namegirl=girlFriend('小菜菜'){
{
girl}}---{
{
girl.gender}}
{
% if girl %} {
{
girl}}--{
{
girl.gender}}{
%else%} {
{
name}}还没有心仪的女生!{
% endif %}{
% for friend in friends %} {
{
friend.name}} {
{
friend.gender}} 删除 更新 {
% endfor %}

template 模板

1.变量: {
{变量名}}
2.控制块: {% if %} …{%else%}…{%endif%}
{% for 变量 in 集合 %} … {% endfor %}
3.过滤器

@app.route('/filter')def use_filter():	return render_template('index2.html', message='this is a message'){
{
message|default('no message')|capitalize}} #能获取到然后开头大写,过滤方法是字符串的方法{
{
'%s have %d apples'|format('Linda',5)}} #format用法{
{
msg|safe}}

MESSAGE

safe会关闭忽略转义{
% autoescape false %} #关闭转义{
{
msg}}
{
{
msg1}}{
% endautoescape %}

{#

模板注释:字符串过滤 default(默认值) title capitalize lower upper reverse tri去除空格 format safe *

数值:abs round—>round(2,‘floor’) 向下截取数值保留2小数

列表:first last length sort sum join(’-’)

#}

{
% set users=[{
'a':100,'b':2},{
'a':11,'b':22},{
'a':111,'b':222}] %}{
% for user in users|sort(attribute='a',reverse=True) %}

{

{
user}}

{
% endfor %}{
% for user in users %} {
% for key,value in user.items() %}

{

{
key}}--{
{
value}}

{
% endfor %}

{
% endfor %}

模板继承

{
% extends 'base.html' %}base.html{
% block content%} #预留一个坑AAAAA{
% endblock %}index3.html{
% block content %} #继承后填坑
{
% endblock %}

{% block 名字 %}

{% endblock %}
步骤:

  1. 定义模板base.html 父模板

    存放的是一些公共的标签(显示)
    在模板里面我们会定义:

    1. {% block 名字 %}
      默认
      {% endblock %}
    2. {% block myjs %} {% endblock %}
      {% block mycss %} {% endblock %}
      注意:定义block的位置跟最后填充的位置一致
  2. 子模板中继承父模板:

    清空子模板
    {% extends ‘base.html’ %}
    填充对应的block
    {% block title %} 关于 {% endblock %}
    {% block myjs %}
    {% endblock %}

补充:

模板加载静态资源:
app.url_map ----> 此属性可以查看路由和视图函数(endpoint)之间的映射关系
<Rule ‘/static/’ 系统默认加的url路径
循环中的loop

goods = ['可乐', '雪碧', '酸奶', '北冰洋', '芬达']@app.route('/goods')def show_goods():    return render_template('index4.html', goods=goods){
% for good in goods %} {
{
loop.index}} {
{
good}} <% endfor %}

宏:类似函数

@app.route('/macro')def show_marco():    return render_template('index5.html',goods=goods)macro.html{
% macro input(name,id,type='text') %} {
% endmacro %}{
% macro show_data(datas,clazz='a1') %}
    {
    % for data in datas %}
  • {
    {
    data}}
  • {
    % endfor %}
{
% endmacro %}index5.html #引用宏文件{
% import 'macro.html' as ma %}
{
{
ma.input('username','username')}}
{
{
ma.input('password','password',type='password')}}

宏:类似python中函数,只不过在模板中定义宏就是定义函数,调用宏(函数)

步骤:

  1. 定义:macro.html

    {% macro 函数名(参数,…) %}

    使用各种模板语法 for if … + html标签
    {% endmacro %}

  2. 使用宏:

    {% import ‘macro.html’ as 别名 %}
    调用:
    {
    { 别名.宏名字(参数) }}


### 蓝图:blueprint 存储操作方式的容器![在这里插入图片描述](https://img-blog.csdnimg.cn/20200621223916730.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NodW5qaWFueGFpb3NoaQ==,size_16,color_FFFFFF,t_70)
apps:__init__.pyfrom flask import Flaskfrom apps.views import index_bpfrom apps.views.ent_view import ent_bpfrom settings import DevelopmentConfigfrom apps.views.blog_view import blog_bpfrom apps.views.house_view import house_bpdef create_app():    app = Flask(__name__,template_folder='../templates')    # 加载配置    app.config.from_object(DevelopmentConfig)    # 注册蓝图    app.register_blueprint(index_bp)    app.register_blueprint(blog_bp)    app.register_blueprint(house_bp, url_prefix='/house')    app.register_blueprint(ent_bp, url_prefix='/ent')    return appviews:__init__.pyfrom flask import Blueprint, render_templateindex_bp = Blueprint('index', __name__)@index_bp.route('/')def index():    return render_template('index.html')

蓝图:Blueprint

步骤:

  1. apps文件中存放各个应用的view
  2. 在每个app的view中定义蓝图:
    xx_bp = Blueprint(‘蓝图名字’,name)
  3. 使用蓝图注册路由:(将路由和视图函数绑定)
    @xx_bp.route(’/’,endpoint=‘xx’)
    def index():
    return ‘首页’
  4. 注册蓝图到app上
    app.register_blueprint(蓝图对象,url_prefix=‘url前缀’)

简易博客

blog_model.pyfrom datetime import datetimeclass Blog:    def __init__(self, title, content, author):        self.title = title        self.content = content        self.author = author        self.datetime = datetime.now()        self.click_num = 0    def __str__(self):        return self.title    def add_click(self):        self.click_num += 1blog_view.pyfrom datetime import datetimefrom flask import Blueprint, render_template, request, redirect, url_forfrom apps.models.blog_model import Blogblog_bp = Blueprint('blog', __name__, url_prefix='/blog')blogs = []@blog_bp.route('/', endpoint='index')def blog_index():    # blog = Blog('简书一年,我找到了一份好工作', '这是我的亲身经历,没有虚构,虽然它听起来不像真的。 2017年11月7日 星期二 晴 说起来很惭愧,在简书写了一年的文,至今,我还是原来的我,既...', '陌上红裙')    # blogs.append(blog)    return render_template('blog/index.html', blogs=blogs)index.html    
博客首页 {
% if blogs %}{
% for blog in blogs %}

{
{
blog.title}}

{

{
blog.content}}

#段落标签

作者:{

{
blog.author}}       发布时间:{
{
blog.datetime}}
      阅读量: {
{
blog.click_num}}
                     删除 更新

{
% endfor %}发表新文章{
% else %}还没有任何的博客文章,赶快点击发表吧!{
% endif %}

添加博客

@blog_bp.route('/add', endpoint='add', methods=['GET', 'POST'])def blog_add():    if request.method == 'POST':        title = request.form.get('title')        author = request.form.get('author')        content = request.form.get('content')        print(title)        # 创建blog对象        blog = Blog(title, content, author)        # 添加blog中        blogs.append(blog)        url = url_for('blog.index')        print(url, type(url))        return redirect(url)    return render_template('blog/add_blog.html')    
添加博客

删除博客

@blog_bp.route('/delete/
',endpoint='delete')def blog_delete(id): value = blogs.pop(id) if value: return redirect(url_for('blog.index'))
删除

转载地址:https://blog.csdn.net/shunjianxaioshi/article/details/106865150 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:python基础知识(一)
下一篇:python-flask(三)

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年03月30日 19时20分11秒