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 相关文章推荐
Python获取当前时间的方法
Jan 14 Python
Python 时间操作例子和时间格式化参数小结
Apr 24 Python
Python实现的一个自动售饮料程序代码分享
Aug 25 Python
探寻python多线程ctrl+c退出问题解决方案
Oct 23 Python
Python计算程序运行时间的方法
Dec 13 Python
简单介绍Python中的JSON模块
Apr 08 Python
python微信跳一跳系列之棋子定位像素遍历
Feb 26 Python
django celery redis使用具体实践
Apr 08 Python
Python任务调度模块APScheduler使用
Apr 15 Python
Python3 如何开启自带http服务
May 18 Python
详解如何用Python实现感知器算法
Jun 18 Python
python使用torch随机初始化参数
Mar 22 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
使用phpexcel类实现excel导入mysql数据库功能(实例代码)
2016/05/12 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
PHP array_shift()用法实例分析
2019/01/07 PHP
基于jquery实现漂亮的动态信息提示效果
2011/08/02 Javascript
JS连连看源码完美注释版(推荐)
2013/12/09 Javascript
Javascript中的几种URL编码方法比较
2015/01/23 Javascript
Vue 仿百度搜索功能实现代码
2017/02/16 Javascript
JavaScript实现二分查找实例代码
2017/02/22 Javascript
jQuery获取Table某列的值(推荐)
2017/03/03 Javascript
Angular简单验证功能示例
2017/12/22 Javascript
微信小程序App生命周期详解
2018/01/31 Javascript
Vue之mixin全局的用法详解
2018/08/22 Javascript
JavaScript数组方法的错误使用例子
2018/09/13 Javascript
vue2.0获取鼠标位置的方法
2018/09/13 Javascript
详解JavaScript对数组操作(添加/删除/截取/排序/倒序)
2019/04/28 Javascript
js 将线性数据转为树形的示例代码
2019/05/28 Javascript
ES6数组与对象的解构赋值详解
2019/06/14 Javascript
使用JavaScript获取Django模板指定键值数据
2020/05/27 Javascript
Python实现的检测web服务器健康状况的小程序
2014/09/17 Python
python语言使用技巧分享
2016/05/31 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
2020/04/07 Python
Python日志:自定义输出字段 json格式输出方式
2020/04/27 Python
Keras自定义实现带masking的meanpooling层方式
2020/06/16 Python
python 获取域名到期时间的方法步骤
2021/02/10 Python
瑞典廉价机票预订网站:Seat24
2018/06/19 全球购物
苏格兰在线威士忌商店:The Whisky Barrel
2019/05/07 全球购物
澳大利亚领先的男装零售连锁店:Lowes
2020/08/07 全球购物
毕业实习个人鉴定范文
2013/12/10 职场文书
社团成立邀请函
2014/01/08 职场文书
租房协议书范本
2014/04/09 职场文书
乡镇领导班子四风对照检查材料
2014/09/27 职场文书
2014旅游局党组书记党建工作汇报材料
2014/11/02 职场文书
HTML通过表单实现酒店筛选功能
2021/05/18 HTML / CSS
python中os.path.join()函数实例用法
2021/05/26 Python
mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构
2022/04/20 MySQL
ant design charts 获取后端接口数据展示
2022/05/25 Javascript