Python Web框架Flask下网站开发入门实例


Posted in Python onFebruary 08, 2015

一、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
5 directories, 8 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'] = '1'

            return response

        else:

            session['islogin'] = '0'

            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 Web框架Flask下网站开发入门实例

Python 相关文章推荐
SVM基本概念及Python实现代码
Dec 27 Python
Python实现上下班抢个顺风单脚本
Feb 07 Python
详解python中的线程
Feb 10 Python
python统计多维数组的行数和列数实例
Jun 23 Python
PyCharm设置每行最大长度限制的方法
Jan 16 Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
Jan 17 Python
Python中asyncio模块的深入讲解
Jun 10 Python
python web框架 django wsgi原理解析
Aug 20 Python
python Qt5实现窗体跟踪鼠标移动
Dec 13 Python
django自带的权限管理Permission用法说明
May 13 Python
Python实现扫码工具的示例代码
Oct 09 Python
python 匿名函数与三元运算学习笔记
Oct 23 Python
Python中使用wxPython开发的一个简易笔记本程序实例
Feb 08 #Python
Python常用的日期时间处理方法示例
Feb 08 #Python
Python中使用PIL库实现图片高斯模糊实例
Feb 08 #Python
Python中解析JSON并同时进行自定义编码处理实例
Feb 08 #Python
Python Web框架Flask中使用七牛云存储实例
Feb 08 #Python
Python Web框架Flask中使用百度云存储BCS实例
Feb 08 #Python
Python Web框架Flask中使用新浪SAE云存储实例
Feb 08 #Python
You might like
PHP 身份证号验证函数
2009/05/07 PHP
PHP5中使用DOM控制XML实现代码
2010/05/07 PHP
php方法调用模式与函数调用模式简例
2011/09/20 PHP
PHP删除HTMl标签的三种解决方法
2013/06/30 PHP
php输入数据统一类实例
2015/02/23 PHP
javascript 静态对象和构造函数的使用和公私问题
2010/03/02 Javascript
Js基础学习资料
2010/11/23 Javascript
JavaScript实现网页上的浮动广告的简单方法
2013/06/14 Javascript
js判断上传文件的类型和大小示例代码
2013/10/18 Javascript
jquery如何把数组变为字符串传到服务端并处理
2014/04/30 Javascript
JavaScript实现将数组中所有元素连接成一个字符串的方法
2015/04/06 Javascript
超级给力的JavaScript的React框架入门教程
2015/07/02 Javascript
jQuery获取URL请求参数的方法
2015/07/18 Javascript
JavaScript中的数据类型转换方法小结
2015/10/26 Javascript
js流动式效果显示当前系统时间
2016/05/16 Javascript
javascript实现获取指定精度的上传文件的大小简单实例
2016/10/25 Javascript
ES6中Array.copyWithin()函数的用法实例详解
2017/09/16 Javascript
node.js博客项目开发手记
2018/03/16 Javascript
在vue项目中引用Iview的方法
2018/09/14 Javascript
详解使用React.memo()来优化函数组件的性能
2019/03/19 Javascript
Ant Design Vue 添加区分中英文的长度校验功能
2020/01/21 Javascript
JavaScript前后端JSON使用方法教程
2020/11/23 Javascript
[04:46]2018年度玩家喜爱的电竞媒体-完美盛典
2018/12/16 DOTA
python2.x实现人民币转大写人民币
2018/06/20 Python
python opencv实现图片旋转矩形分割
2018/07/26 Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
2019/08/12 Python
python生成器推导式用法简单示例
2019/10/08 Python
Python爬虫爬取煎蛋网图片代码实例
2019/12/16 Python
matplotlib quiver箭图绘制案例
2020/04/17 Python
Python3爬虫中pyspider的安装步骤
2020/07/29 Python
德国在线香料制造商:Gewürzland
2020/03/10 全球购物
项目考察欢迎辞
2014/01/17 职场文书
校运会口号
2014/06/18 职场文书
九一八事变演讲稿范文
2014/09/14 职场文书
Nginx 安装SSL证书完成HTTPS部署
2022/04/28 Servers
python数字图像处理之图像的批量处理
2022/06/28 Python