java程序员怎么从Python小白变成Python大拿?(七)

文章7:Web开发入门------Flask 或 Django

目标

从零开始构建简单的Web应用程序,掌握框架选择、路由、视图、模板引擎和数据库集成。


一、Flask vs Django:如何选择?

1. Flask

  • 特点:轻量级、灵活、模块化,适合小型项目或快速原型开发。
  • 优势:简单易学,无需复杂配置,适合微服务或API开发。
  • 缺点:需手动集成扩展(如ORM、身份验证)。

2. Django

  • 特点:全栈框架,内置ORM、认证、管理后台等,适合中大型项目。
  • 优势:开箱即用,遵循" batteries-included"哲学。
  • 缺点:配置较复杂,灵活性较低。

选择建议

  • Flask:适合需要高度定制化或小型项目。
  • Django:适合需要快速搭建完整应用(如博客、电商)。

二、创建第一个Flask应用

1. 安装与初始化

复制代码
pip install flask

2. 编写Hello World

python 复制代码
# app.py
from flask import Flask
app = Flask(__name__)

@app.route('/')  # 路由装饰器
def home():
    return "Hello, Flask!"

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

运行命令:

复制代码
python app.py

访问 ​​http://localhost:5000​​,看到"Hello, Flask!"。


三、路由与视图函数

1. 路由(URL映射)

通过​​@app.route​​将URL路径映射到函数(视图)。

less 复制代码
@app.route('/')
def index():
    return "Welcome to the homepage!"

@app.route('/about')
def about():
    return "This is the about page."

2. 动态路由与参数

less 复制代码
@app.route('/user/<username>')  # 接收字符串参数
def user_profile(username):
    return f"User: {username}"

@app.route('/post/<int:post_id>')  # 类型转换(整数)
def show_post(post_id):
    return f"Post ID: {post_id}"

3. HTTP方法

python 复制代码
from flask import request

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        return "Handling POST request"
    else:
        return "Handling GET request"

四、模板引擎(Jinja2)

1. 渲染HTML模板

  • 目录结构

    project/
    ├── templates/
    │ └── index.html
    └── app.py

2. 示例模板

xml 复制代码
<!-- templates/index.html -->
<!DOCTYPE html>
<html>
<head>
    <title>My App</title>
</head>
<body>
    <h1>{{ greeting }}</h1>
    <ul>
        {% for item in items %}
            <li>{{ item }}</li>
        {% endfor %}
    </ul>
</body>
</html>

3. 在视图中渲染模板

python 复制代码
from flask import render_template

@app.route('/items')
def items():
    items_list = ["Apple", "Banana", "Orange"]
    return render_template('index.html', greeting="Welcome", items=items_list)

五、数据库集成:SQLAlchemy(Flask)或Django ORM

1. Flask + SQLAlchemy

  • 安装

    pip install flask-sqlalchemy

  • 配置数据库

python 复制代码
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
db = SQLAlchemy(app)

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

    def __repr__(self):
        return f"User('{self.username}', '{self.email}')"
  • CRUD操作
ini 复制代码
# 创建用户
new_user = User(username='alice', email='alice@example.com')
db.session.add(new_user)
db.session.commit()

# 查询用户
user = User.query.filter_by(username='alice').first()

2. Django ORM

  • 创建模型
python 复制代码
# models.py
from django.db import models

class User(models.Model):
    username = models.CharField(max_length=20, unique=True)
    email = models.EmailField(unique=True)

    def __str__(self):
        return self.username
  • 迁移数据库

    python manage.py makemigrations
    python manage.py migrate

  • 在视图中操作数据

python 复制代码
from .models import User

def create_user(request):
    user = User.objects.create(username='bob', email='bob@example.com')
    return HttpResponse(f"User {user.username} created")

六、综合示例:待办事项应用(Flask)

1. 目录结构

复制代码
todo_app/
├── app.py
├── templates/
│   ├── index.html
│   └── add_task.html
└── models.py

2. 模型(models.py

python 复制代码
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class Task(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False)
    completed = db.Column(db.Boolean, default=False)

    def __repr__(self):
        return f"Task('{self.title}', {self.completed})"

3. 视图与路由(app.py

python 复制代码
from flask import Flask, render_template, request, redirect, url_for
from models import db, Task

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///tasks.db'
db.init_app(app)

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

@app.route('/add', methods=['POST'])
def add_task():
    title = request.form['title']
    new_task = Task(title=title)
    db.session.add(new_task)
    db.session.commit()
    return redirect(url_for('index'))

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

4. 模板(templates/index.html)

xml 复制代码
<!-- index.html -->
<form action="/add" method="POST">
    <input type="text" name="title" placeholder="Add a task">
    <button type="submit">Add</button>
</form>

<ul>
    {% for task in tasks %}
        <li>{{ task.title }} 
            <form action="/complete/{{ task.id }}" method="POST" style="display:inline">
                <button>Complete</button>
            </form>
        </li>
    {% endfor %}
</ul>

七、练习题

  1. 使用Flask创建一个"计算器"应用,用户输入两个数和操作符,返回结果。
  2. 在Django中创建一个博客模型(标题、内容、作者、发布时间),并添加管理后台。
  3. 扩展待办事项应用,添加"标记为完成"功能(通过路由和数据库更新)。
  4. 使用Django的模板继承,创建一个基础布局模板,供所有页面继承。

总结

通过本文,你已掌握:

  • Flask/Django:快速搭建Web应用的核心流程。
  • 路由与视图:处理URL请求与响应。
  • 模板引擎:分离业务逻辑与界面展示。
  • 数据库集成:通过ORM实现数据持久化。

继续深入学习,可以探索静态文件管理、表单验证、用户认证、API开发等高级主题。现在,你可以尝试构建自己的项目,如个人博客、待办事项列表或简单的电商系统!

相关推荐
Asmalin35 分钟前
【代码随想录day 16】 力扣 112. 路径总和
java·算法·leetcode
fenglllle1 小时前
springboot 2.4跨域变化和swagger结合的问题
java·spring boot·spring
liliangcsdn1 小时前
docker缓存目录转移设置和生效过程
java·docker·容器
我们从未走散1 小时前
Redis学习笔记-----Redis内存回收
java·redis·笔记·学习
C4程序员1 小时前
北京JAVA基础面试30天打卡06
java·开发语言·面试
Mike_小新1 小时前
【Mike随想】未来更看重架构能力和业务经验,而非单纯编码能力
后端·程序员
Abadbeginning1 小时前
FastSoyAdmin导出excel报错‘latin-1‘ codec can‘t encode characters in position 41-54
前端·javascript·后端
很小心的小新2 小时前
五、SpringBoot工程打包与运行
java·spring boot·后端
ACGkaka_2 小时前
SpringBoot 集成 MapStruct
java·spring boot·后端