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 相关文章推荐
python2.7安装图文教程
Mar 13 Python
Python3中正则模块re.compile、re.match及re.search函数用法详解
Jun 11 Python
python爬取个性签名的方法
Jun 17 Python
python的pip安装以及使用教程
Sep 18 Python
Pandas之排序函数sort_values()的实现
Jul 09 Python
Python Django基础二之URL路由系统
Jul 18 Python
解决Django中多条件查询的问题
Jul 18 Python
python3.7环境下安装Anaconda的教程图解
Sep 10 Python
Python完全识别验证码自动登录实例详解
Nov 24 Python
Keras搭建自编码器操作
Jul 03 Python
PyTorch安装与基本使用详解
Aug 31 Python
python函数指定默认值的实例讲解
Mar 29 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
discuz论坛 用户登录 后台程序代码
2008/11/27 PHP
php.ini-dist 和 php.ini-recommended 的区别介绍(方便开发与安全的朋友)
2012/07/01 PHP
PHP内部实现打乱字符串顺序函数str_shuffle的方法
2019/02/14 PHP
JavaScript(js)设置默认输入焦点(focus)
2012/12/28 Javascript
简体中文转换繁体中文(实现代码)
2013/12/25 Javascript
js中top的作用深入剖析
2014/03/04 Javascript
jQuery学习笔记之jQuery.extend(),jQuery.fn.extend()分析
2014/06/09 Javascript
JavaScript中合并数组的N种方法
2014/09/16 Javascript
jQuery构造函数init参数分析
2015/05/13 Javascript
jquery实现全屏滚动
2015/12/28 Javascript
javascript获取wx.config内部字段解决微信分享
2016/03/09 Javascript
微信端开发--登录小程序步骤
2017/01/11 Javascript
Javascript ES6中数据类型Symbol的使用详解
2017/05/02 Javascript
用原生JS实现简单的多选框功能
2017/06/12 Javascript
js实现城市级联菜单的2种方法
2017/06/23 Javascript
Vue中组件之间数据的传递的示例代码
2017/09/08 Javascript
详解vue-cli中的ESlint配置文件eslintrc.js
2017/09/25 Javascript
原生js封装添加class,删除class的实例
2017/11/06 Javascript
Vue.js特性Scoped Slots的浅析
2019/02/20 Javascript
egg.js的基本使用和调用数据库的方法示例
2019/05/18 Javascript
Vue循环中多个input绑定指定v-model实例
2020/08/31 Javascript
[02:28]DOTA2 2017国际邀请赛小组赛回顾
2017/08/09 DOTA
使用py2exe在Windows下将Python程序转为exe文件
2016/03/04 Python
python中实现字符串翻转的方法
2018/07/11 Python
python版opencv摄像头人脸实时检测方法
2018/08/03 Python
Python 最大概率法进行汉语切分的方法
2018/12/14 Python
PyQt5 多窗口连接实例
2019/06/19 Python
Python reduce函数作用及实例解析
2020/05/08 Python
印度最大的网上花店:Ferns N Petals(鲜花、礼品和蛋糕)
2017/10/16 全球购物
在子网210.27.48.21/30种有多少个可用地址?分别是什么?
2014/07/27 面试题
省文明单位申报材料
2014/05/08 职场文书
趣味运动会广播稿
2014/09/13 职场文书
党的群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
党支部评议意见
2015/06/02 职场文书
python基于tkinter制作m3u8视频下载工具
2021/04/24 Python
python获取带有返回值的多线程
2022/05/02 Python