python学习笔记十三:Flask demo
一、Flask简介
Flask 是一个 Python 实现的 Web 开发微框架。官网:http://flask.pocoo.org/
二、Demo
1、代码结构
- .
- ├── blog.py
- ├── static
- │ ├── css
- │ │ └── index.css
- │ ├── images
- │ │ ├── cat.jpg
- │ │ └── sheying1229.jpg
- │ └── js
- └── templates
- ├── index.html
- ├── login.html
- ├── regist.html
- └── upload.html
- directories, files
2、主程序blog.py
- #!/usr/bin/python
- #coding:utf8
- from flask import Flask, render_template, url_for, request,redirect,make_response,session
- import os,MySQLdb
- app = Flask(__name__)
- app.secret_key='afjlsjfowflajflkajfkjfkaljf'
- user_list = ['jim','max','py']
- imagepath = os.path.join(os.getcwd(),"static/images")
- @app.route('/')
- def index():
- username = request.cookies.get('username')
- if not username:
- username = u'请先登录'
- islogin = session.get('islogin')
- nav_list = [u'首页',u'经济',u'文化',u'科技',u'娱乐']
- blog = {'title':'welcome to my blog','content':'hello, welcome to my blog.'}
- blogtag = {'javascript':10,"python":20,"shell":5}
- img = url_for('static', filename="images/cat.jpg")
- return render_template('index.html', nav_list=nav_list, username=username, blog = blog, blogtag = blogtag, img=img, islogin=islogin)
- @app.route('/reg', methods=['GET','POST'])
- def regist():
- if request.method == 'POST':
- username = request.form['username']
- conn = MySQLdb.connect(user='root',passwd='admin',host='127.0.0.1')
- conn.select_db('blog')
- curr = conn.cursor()
- sql = 'insert into `user` (`id`,`username`) values (%d,"%s")' % (1,username)
- curr.execute(sql)
- conn.commit()
- curr.close()
- conn.close()
- return "user %s regist ok!" % request.form['username']
- else:
- #request.args['username']
- return render_template('regist.html')
- @app.route('/upload', methods=['GET','POST'])
- def upload():
- if request.method == 'POST':
- username = request.form['username']
- file = request.files['img']
- filename = file.filename
- file.save(os.path.join(imagepath,filename))
- return "<img src='static/images/%s' alt=''/>" % filename
- else:
- return render_template('upload.html')
- @app.route('/login/', methods=['GET','POST'])
- def login():
- if request.method == 'POST':
- username = request.form.get('username')
- if username in user_list:
- response = make_response(redirect('/'))
- response.set_cookie('username', value=username, max_age=300)
- session['islogin'] = ''
- return response
- else:
- session['islogin'] = ''
- return redirect('/login/')
- else:
- return render_template('login.html')
- if __name__ == '__main__':
- app.run(debug=True,host='0.0.0.0',port=5000)
主要有首页、注册、登录、上传页面。
blog.py主要是展示了Flask中常见功能用法:路由,数据库操作,cookie,session,redirect,表单,文件上传,调试,Web服务器的IP和端口,静态文件读取等。
3、首页模板index.html
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8"/>
- <title>Flask DEMO</title>
- <link rel="stylesheet" type="text/css" href="static/css/index.css"/>
- </head>
- <body>
- <div class="header">
- {%if islogin == '1' %}
- <h1>Welcome ,{{username}}!</h1>
- {%else%}
- <h1>{{username}}!</h1>
- {%endif%}
- <div class="nav">
- <ul>
- {%for nav in nav_list%}
- <li><a href="{{nav}}">{{nav}}</a></li>
- {%endfor%}
- </ul>
- </div>
- </div>
- <div class="container">
- <div class="item">
- <h1>{{blog['title']}}</h1>
- <div class="content">
- <img src="/static/images/cat.jpg" alt="cat" />
- <p>{{blog['content']}}</p>
- <img src="{{img}}" alt="cat" />
- </div>
- </div>
- <div class="side">
- <ul>
- {%for key,value in blogtag.items()%}
- <li>{{key}}({{value}})</li>
- {%endfor%}
- </ul>
- </div>
- </div>
- </body>
- </html>
这个模板主要展示了在Flask模板中如何读取各种类型的变量。
4、登录页面login.html
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8"/>
- <title>Login</title>
- <link rel="stylesheet" type="text/css" href="static/css/index.css"/>
- </head>
- <body>
- <div class="header">
- <h1>Login</h1>
- </div>
- <div class="container">
- <div class="item">
- <form action="" method="post">
- <input type="text" placeholder="please input username" name="username" /><br/>
- <input type="submit" value="Login"/>
- </form>
- </div>
- </div>
- </body>
- </html>
结合blog.py主要展示表单如何提交取值,cookie和session应用。
5、注册页面regist.html
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8"/>
- <title>Regist</title>
- <link rel="stylesheet" type="text/css" href="static/css/index.css"/>
- </head>
- <body>
- <div class="header">
- <h1>Regist</h1>
- </div>
- <div class="container">
- <div class="item">
- <form action="" method="post">
- <input type="text" placeholder="please input username" name="username" /><br/>
- <input type="submit" value="Regist"/>
- </form>
- </div>
- </div>
- </body>
- </html>
结合blog.py主要展示了数据库操作。
6、上传页面upload.html
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8"/>
- <title>Upload</title>
- <link rel="stylesheet" type="text/css" href="static/css/index.css"/>
- </head>
- <body>
- <div class="header">
- <h1>Upload</h1>
- </div>
- <div class="container">
- <div class="item">
- <form action="" method="post" enctype="multipart/form-data">
- <input type="text" name="username" /><br/>
- <input type="file" name="img" /><br/>
- <input type="submit" value="Upload"/>
- </form>
- </div>
- </div>
- </body>
- </html>
结合blog.py主要展示了如何上传文件。
7、运行效果
三、参考资料
python学习笔记十三:Flask demo的更多相关文章
- python 学习笔记十三 JQuery(进阶篇)
jQuery 是一个 JavaScript 库. jQuery 极大地简化了 JavaScript 编程. 安装jQuery 有两个版本的 jQuery 可供下载: Production versio ...
- python学习笔记(十三)接口开发
一.开发接口的作用 1.mock接口,模拟一些接口,在别的接口没有开发好的时候,需要开发一些模拟接口进行调试和测试. 2.查看数据,比如,获取所有学员信息的接口,就不需要提供数据库的查看信息. 二.接 ...
- python学习笔记十三 JS,Dom(进阶篇)
JS介绍 JavaScript 是属于网络的脚本语言!JavaScript 被数百万计的网页用来改进设计.验证表单.检测浏览器.创建cookies,以及更多的应用:JavaScript 是因特网上最流 ...
- python学习笔记(十三): 多线程多进程
一.线程&进程 对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程, ...
- python学习笔记(十三)-python对Excel进行读写修改操作
日常工作中会遇到Excel的读写问题.我们可以使用xlwt 模块将数据写入Excel表格,使用xlrd 模块从Excel读取数据,使用xlutils模块和xlrd模块结合对Excel数据进行修改.下面 ...
- Python学习笔记(十三)
Python学习笔记(十三): 模块 包 if name == main 软件目录结构规范 作业-ATM+购物商城程序 1. 模块 1. 模块导入方法 import 语句 import module1 ...
- python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息,抓取政府网新闻内容
python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息PySpider:一个国人编写的强大的网络爬虫系统并带有强大的WebUI,采用Python语言编写 ...
- OpenCV之Python学习笔记
OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...
- Deep learning with Python 学习笔记(10)
生成式深度学习 机器学习模型能够对图像.音乐和故事的统计潜在空间(latent space)进行学习,然后从这个空间中采样(sample),创造出与模型在训练数据中所见到的艺术作品具有相似特征的新作品 ...
随机推荐
- SAP成都研究院飞机哥: SAP C4C中国本地化之微信聊天机器人的集成
今天的文章仍然来自Jerry的老同事,SAP成都研究院的张航(Zhang Harry).关于他的背景介绍,请参考张航之前的文章:SAP成都研究院飞机哥:程序猿和飞机的不解之缘.下面是他的正文. 大家好 ...
- 修改hosts工具推荐SwitchHosts
推荐一个修改hosts的工具.适合平时工作中经常修改hosts的开发测试. 下载地址:https://oldj.github.io/SwitchHosts/ 可以按各种环境或者项目添加,用的时候打开或 ...
- .net core 2.0下的容器注册方法
https://www.cnblogs.com/Wddpct/p/5764511.html 自带的容器注册方法真的很好用
- ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id
远程删除key ssh-keygen -f "~/.ssh/known_hosts" -R 192.168.0.34 如果还是不可以,通过 ssh-keygen 重新生成key
- 1.5配置NetBackup数据库备份策略(nbu策略catalog)
1.5配置NetBackup数据库备份策略 建议定期备份NetBackup的索引数据库Catalog,以确保故障时的有效恢复.从Javaconsole可以进入备份NetBackup内部数据库配置窗口, ...
- 问题 B: 投简历
题目描述 小华历经12寒窗苦读,又经历4年大学磨砺,终于毕业了,随着毕业季的到来,找工作也日益紧张起来.由于要面试不同的公司,因此小华需要准备不同的简历.当然最基本的信息是必不可少的,基本信息:姓名. ...
- 问题 C: P4 游戏中的Human角色
题目描述 在一个平面打斗游戏中,任何的角色(Role)都有血量(blood)和位置loc(此处loc是Location类的实例)属性.有了Role类,可以派生出不同的角色,如人.神仙.怪兽等.如下程序 ...
- 五、@property的参数
格式:@property(参数1,参数2)类型 名字: 参数可有可无 如:@property int age; @property (nonatomic,retain) UIButton* btn; ...
- MVAPICH
from:https://developer.nvidia.com/mvapich MVAPICH2 is an open source implementation of Message Passi ...
- 修改与遍历MAP
package com.*; import java.util.*; /** * Created by HP on 2018/8/2. */ public class Test { //定义一个用于转 ...