Python 进阶实战:Web开发与数据处理

https://miro.medium.com/max/1400/1*HLGtY3O-RxHbcuZP9zu6Ew.png

Flask Web 开发入门

基础Flask应用

python

复制

下载

from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return "<h1>欢迎来到我的Flask应用!</h1>"

@app.route('/about')
def about():
    return """
    <h1>关于我们</h1>
    <p>这是一个用Python Flask构建的简单网站</p>
    """

if __name__ == '__main__':
    app.run(debug=True)

https://flask.palletsprojects.com/en/2.0.x/_images/flask-logo.png

模板渲染与静态文件

项目结构:

text

复制

下载

myapp/
├── app.py
├── static/
│   └── style.css
└── templates/
    └── index.html

python

复制

下载

# app.py
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html', title='首页')

@app.route('/user/<name>')
def user(name):
    return render_template('user.html', name=name)

html

复制

下载

运行

<!-- templates/index.html -->
<!DOCTYPE html>
<html>
<head>
    <title>{{ title }}</title>
    <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
    <h1>Hello, Flask!</h1>
</body>
</html>

数据处理与分析

Pandas 基础

python

复制

下载

import pandas as pd

# 创建DataFrame
data = {
    '姓名': ['张三', '李四', '王五'],
    '年龄': [25, 30, 35],
    '城市': ['北京', '上海', '广州']
}
df = pd.DataFrame(data)

# 基本操作
print(df.head())      # 查看前几行
print(df.describe())  # 统计摘要
print(df['年龄'].mean())  # 计算平均年龄

# 数据筛选
young_people = df[df['年龄'] < 30]
print(young_people)

https://pandas.pydata.org/docs/_images/01_table_dataframe.svg

数据可视化

python

复制

下载

import matplotlib.pyplot as plt
import numpy as np

# 创建数据
x = np.linspace(0, 10, 100)
y = np.sin(x)

# 绘制图形
plt.figure(figsize=(8, 4))
plt.plot(x, y, label='sin(x)', color='blue')
plt.title('正弦函数曲线')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.legend()
plt.grid(True)
plt.savefig('sin_plot.png')  # 保存图片
plt.show()

https://matplotlib.org/stable/_images/sphx_glr_plot_001.png

数据库交互

SQLite 操作

python

复制

下载

import sqlite3

# 连接数据库
conn = sqlite3.connect('example.db')
cursor = conn.cursor()

# 创建表
cursor.execute('''CREATE TABLE IF NOT EXISTS users
               (id INTEGER PRIMARY KEY AUTOINCREMENT,
                name TEXT NOT NULL,
                age INTEGER)''')

# 插入数据
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('Alice', 25))
conn.commit()

# 查询数据
cursor.execute("SELECT * FROM users")
for row in cursor.fetchall():
    print(row)

# 关闭连接
conn.close()

https://www.sqlitetutorial.net/wp-content/uploads/2015/11/sqlite-sample-database-color.jpg

SQLAlchemy ORM

python

复制

下载

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    
    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)
    
    def __repr__(self):
        return f"<User(name='{self.name}', age={self.age})>"

# 创建引擎和会话
engine = create_engine('sqlite:///orm_example.db')
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()

# 添加新用户
new_user = User(name='Bob', age=30)
session.add(new_user)
session.commit()

# 查询用户
users = session.query(User).filter(User.age > 25).all()
print(users)

RESTful API 开发

Flask RESTful 服务

python

复制

下载

from flask import Flask, request, jsonify
from flask_restful import Api, Resource

app = Flask(__name__)
api = Api(app)

books = [
    {"id": 1, "title": "Python编程", "author": "John Doe"},
    {"id": 2, "title": "Flask Web开发", "author": "Jane Smith"}
]

class BookList(Resource):
    def get(self):
        return jsonify(books)
    
    def post(self):
        new_book = request.get_json()
        books.append(new_book)
        return jsonify({"message": "Book added successfully"})

class Book(Resource):
    def get(self, book_id):
        book = next((b for b in books if b["id"] == book_id), None)
        if book:
            return jsonify(book)
        return {"message": "Book not found"}, 404

api.add_resource(BookList, '/books')
api.add_resource(Book, '/books/<int:book_id>')

if __name__ == '__main__':
    app.run(debug=True)

https://www.moesif.com/images/blog/platform/restful-apis/rest-api.png

实战项目:博客系统

项目结构:

text

复制

下载

flask_blog/
├── app.py
├── config.py
├── requirements.txt
├── static/
├── templates/
│   ├── base.html
│   ├── index.html
│   ├── post.html
│   └── auth/
│       ├── login.html
│       └── register.html
└── migrations/

核心代码示例:

python

复制

下载

# app.py
from flask import Flask, render_template, request, redirect, url_for, flash
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager, UserMixin, login_user, logout_user, login_required

app = Flask(__name__)
app.config.from_pyfile('config.py')

db = SQLAlchemy(app)
login_manager = LoginManager(app)

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    password = db.Column(db.String(120), nullable=False)

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False)
    content = db.Column(db.Text, nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    author = db.relationship('User', backref=db.backref('posts', lazy=True))

@app.route('/')
def index():
    posts = Post.query.all()
    return render_template('index.html', posts=posts)

@app.route('/post/<int:post_id>')
def show_post(post_id):
    post = Post.query.get_or_404(post_id)
    return render_template('post.html', post=post)

@app.route('/create', methods=['GET', 'POST'])
@login_required
def create_post():
    if request.method == 'POST':
        title = request.form['title']
        content = request.form['content']
        post = Post(title=title, content=content, author=current_user)
        db.session.add(post)
        db.session.commit()
        flash('文章发布成功!', 'success')
        return redirect(url_for('index'))
    return render_template('create.html')

if __name__ == '__main__':
    app.run(debug=True)

https://blog.miguelgrinberg.com/static/images/flask-mega-tutorial/ch07-users.png

部署Python应用

使用Gunicorn部署Flask应用

bash

复制

下载

# 安装Gunicorn
pip install gunicorn

# 运行应用
gunicorn -w 4 -b 0.0.0.0:8000 app:app

# 使用Nginx作为反向代理
# nginx配置示例:
"""
server {
    listen 80;
    server_name yourdomain.com;
    
    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
"""

https://testdriven.io/static/images/blog/flask-docker/final_architecture.png

Python最佳实践

  1. 代码风格:遵循PEP 8规范

  2. 文档编写:使用docstring和Sphinx

  3. 单元测试:使用unittest或pytest

  4. 日志记录:使用logging模块

  5. 性能分析:使用cProfile或Py-Spy

python

复制

下载

# 单元测试示例
import unittest

def add(a, b):
    return a + b

class TestMathFunctions(unittest.TestCase):
    def test_add(self):
        self.assertEqual(add(2, 3), 5)
        self.assertEqual(add(-1, 1), 0)
        self.assertEqual(add(0, 0), 0)

if __name__ == '__main__':
    unittest.main()

# 日志记录示例
import logging

logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    filename='app.log'
)

logger = logging.getLogger(__name__)
logger.info('程序启动')
try:
    1 / 0
except ZeroDivisionError:
    logger.error('除零错误', exc_info=True)

学习资源推荐

  1. 进阶书籍

    • 《Fluent Python》

    • 《Python Cookbook》

    • 《Effective Python》

  2. 在线课程

    • Coursera: Python for Everybody

    • Udemy: Complete Python Bootcamp

    • Real Python教程

  3. 开发工具

    • PyCharm专业版

    • VS Code + Python插件

    • Jupyter Notebook

  4. 社区资源

    • Python官方论坛

    • Stack Overflow

    • GitHub开源项目

https://www.python.org/static/community_logos/python-logo-master-v3-TM.png

通过这四篇系列教程,你已经从Python新手成长为能够开发实际应用的Python开发者。接下来,选择一个你感兴趣的领域深入钻研,不断实践,你将成为真正的Python专家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值