自学内容网 自学内容网

Python入门(15)--Web开发

Web开发入门教程 🌐

1. Flask框架入门 🚀

1.1 Flask基础介绍

Flask是一个轻量级的Python Web框架,提供了快速开发Web应用的工具和库:

from flask import Flask, request, jsonify, render_template

app = Flask(__name__)

@app.route('/')
def home():
    return render_template('index.html')

@app.route('/hello')
def hello():
    return 'Hello, World!'

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

1.2 路由与视图函数

# URL参数处理
@app.route('/user/<username>')
def show_user_profile(username):
    return f'User {username}'

# HTTP方法
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        return handle_login()
    return show_login_form()

# 请求处理
@app.route('/api/data')
def get_data():
    data = request.args.get('type')
    return jsonify({'data': data})

1.3 模板渲染

# 使用Jinja2模板
@app.route('/dashboard')
def dashboard():
    user = {'name': 'John', 'role': 'Admin'}
    posts = get_user_posts()
    return render_template('dashboard.html',
                         user=user,
                         posts=posts)
<!-- templates/dashboard.html -->
<!DOCTYPE html>
<html>
<head>
    <title>Dashboard</title>
</head>
<body>
    <h1>Welcome {{ user.name }}</h1>
    {% for post in posts %}
        <div class="post">
            <h2>{{ post.title }}</h2>
            <p>{{ post.content }}</p>
        </div>
    {% endfor %}
</body>
</html>

2. RESTful API设计 📡

2.1 API设计原则

  1. 使用HTTP方法表示操作:

    • GET:获取资源
    • POST:创建资源
    • PUT:更新资源
    • DELETE:删除资源
  2. 使用合适的状态码:

    • 200:成功
    • 201:创建成功
    • 400:客户端错误
    • 404:资源不存在
    • 500:服务器错误

2.2 API实现示例

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

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

# 文章资源
class ArticleAPI(Resource):
    def get(self, article_id=None):
        if article_id:
            return get_article(article_id)
        return get_all_articles()
    
    def post(self):
        data = request.get_json()
        return create_article(data), 201
    
    def put(self, article_id):
        data = request.get_json()
        return update_article(article_id, data)
    
    def delete(self, article_id):
        return delete_article(article_id)

# 注册API路由
api.add_resource(ArticleAPI, '/api/articles', '/api/articles/<int:article_id>')

2.3 错误处理

from werkzeug.exceptions import HTTPException

@app.errorhandler(HTTPException)
def handle_exception(e):
    response = {
        "code": e.code,
        "name": e.name,
        "description": e.description,
    }
    return jsonify(response), e.code

class APIError(Exception):
    def __init__(self, message, status_code=400):
        self.message = message
        self.status_code = status_code

@app.errorhandler(APIError)
def handle_api_error(error):
    response = {
        'error': error.message
    }
    return jsonify(response), error.status_code

3. 数据库操作 💾

3.1 SQLAlchemy配置

from flask_sqlalchemy import SQLAlchemy
from datetime import datetime

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///blog.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

# 定义模型
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    posts = db.relationship('Post', backref='author', lazy=True)

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)
    created_at = db.Column(db.DateTime, default=datetime.utcnow)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

3.2 数据库操作

# 创建
def create_user(username, email):
    user = User(username=username, email=email)
    db.session.add(user)
    db.session.commit()
    return user

# 查询
def get_user(user_id):
    return User.query.get_or_404(user_id)

# 更新
def update_user(user_id, data):
    user = User.query.get_or_404(user_id)
    for key, value in data.items():
        setattr(user, key, value)
    db.session.commit()
    return user

# 删除
def delete_user(user_id):
    user = User.query.get_or_404(user_id)
    db.session.delete(user)
    db.session.commit()

4. 实战案例:个人博客系统 📝

让我们创建一个完整的个人博客系统:

from flask import Flask, request, jsonify, render_template
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager, UserMixin, login_user, logout_user
from werkzeug.security import generate_password_hash, check_password_hash

class BlogSystem:
    def __init__(self):
        self.app = Flask(__name__)
        self.init_app()
        
    def init_app(self):
        """初始化应用"""
        self.app.config['SECRET_KEY'] = 'your-secret-key'
        self.app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///blog.db'
        
        self.db = SQLAlchemy(self.app)
        self.login_manager = LoginManager()
        self.login_manager.init_app(self.app)
        
        self.create_models()
        self.register_routes()
        
    def create_models(self):
        """定义数据模型"""
        class User(UserMixin, self.db.Model):
            id = self.db.Column(self.db.Integer, primary_key=True)
            username = self.db.Column(self.db.String(80), unique=True)
            password_hash = self.db.Column(self.db.String(120))
            posts = self.db.relationship('Post', backref='author', lazy=True)
            
        class Post(self.db.Model):
            id = self.db.Column(self.db.Integer, primary_key=True)
            title = self.db.Column(self.db.String(100))
            content = self.db.Column(self.db.Text)
            created_at = self.db.Column(self.db.DateTime, 
                                      default=datetime.utcnow)
            user_id = self.db.Column(self.db.Integer, 
                                   self.db.ForeignKey('user.id'))
            
        self.User = User
        self.Post = Post
        
    def register_routes(self):
        """注册路由"""
        @self.app.route('/')
        def home():
            posts = self.Post.query.order_by(
                self.Post.created_at.desc()).all()
            return render_template('home.html', posts=posts)
        
        @self.app.route('/post/<int:post_id>')
        def view_post(post_id):
            post = self.Post.query.get_or_404(post_id)
            return render_template('post.html', post=post)
        
        @self.app.route('/create', methods=['GET', 'POST'])
        def create_post():
            if request.method == 'POST':
                title = request.form['title']
                content = request.form['content']
                post = self.Post(title=title, content=content)
                self.db.session.add(post)
                self.db.session.commit()
                return redirect(url_for('view_post', post_id=post.id))
            return render_template('create_post.html')

def main():
    """主函数:启动博客系统"""
    blog = BlogSystem()
    blog.app.run(debug=True)

if __name__ == '__main__':
    main()

博客系统特点:

  1. 完整的用户系统

    • 用户注册和登录
    • 密码加密存储
    • 用户认证和授权
  2. 文章管理功能

    • 创建和编辑文章
    • 文章分类和标签
    • 评论系统
  3. 前端展示

    • 响应式设计
    • 文章列表和详情页
    • 用户个人中心
  4. 扩展功能

    • 搜索功能
    • RSS订阅
    • 文章统计

扩展建议:

  1. 添加文章分类系统
  2. 实现评论功能
  3. 添加用户权限管理
  4. 实现文章搜索
  5. 添加文件上传功能
  6. 实现API接口
  7. 添加缓存系统

这个实战案例展示了如何使用Flask框架构建一个完整的博客系统,涵盖了Web开发中的各个重要概念和技术点。你可以基于这个框架继续扩展更多功能。


如果你觉得这篇文章有帮助,欢迎点赞转发,也期待在评论区看到你的想法和建议!👇

咱们下一期见!


原文地址:https://blog.csdn.net/Chen7Chan/article/details/144005434

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!