从零开始:用后端项目开启你的代码人生

技术碎碎念
2026-01-04 05:43
阅读 1937

大家好,我是小林,一名211高校的计算机专业研究生,也是一名坚持写了三年技术博客的“老学长”。今天这篇教程,源于我最近在 Coze 社区做讲师时遇到的一个高频问题:“我想学编程,但不知道该从哪里下手,更不知道怎么把学到的东西变成真正能跑起来的东西。”

其实我当初学的时候也一样——看了无数视频、敲了无数“Hello World”,却始终觉得自己像个“纸上谈兵”的码农。直到我尝试用一个真实的后端项目串联起所学知识,才真正体会到什么叫“代码人生”:写代码不是为了炫技,而是为了解决问题,甚至支撑起一个产品的运营逻辑

所以,本文不讲大道理,只带你用最朴素的方式,完成一个可运行、可扩展、能体现“后端 + 运营”思维的小项目。全程实战,零基础也能跟上!


一、我们到底要做什么?

很多人对“后端”有误解,以为就是写接口、连数据库。其实后端的核心是支撑业务运转。而“运营”也不是发朋友圈,而是通过数据、功能、策略让用户留下来。

今天我们要做的,是一个极简的 用户签到系统。它包含:

  • 用户注册/登录(身份验证)
  • 每日签到(记录行为)
  • 查看签到天数(数据展示)
  • 后台可查看所有用户签到情况(运营视角)

这个小系统虽简单,却完整体现了“后端如何服务前端+支撑运营”的闭环。


二、环境准备:5分钟搭好开发地基

⚠️ 别跳过这一步!很多新手卡在环境配置上直接放弃。

我们将使用 Python 的 Flask 框架(轻量、易上手),配合 SQLite(无需额外安装数据库)。

步骤清单:

  1. 安装 Python 3.8+

    • python.org 下载安装
    • 安装时勾选 “Add to PATH”
  2. 创建项目文件夹

    mkdir sign-in-system
    cd sign-in-system
    
  3. 创建虚拟环境(隔离依赖)

    python -m venv venv
    # Windows
    venv\Scripts\activate
    # macOS/Linux
    source venv/bin/activate
    
  4. 安装依赖

    pip install flask flask-sqlalchemy python-dotenv
    
  5. 创建基础文件结构

    sign-in-system/
    ├── app.py          # 主程序
    ├── models.py       # 数据模型
    └── .env            # 环境变量(可选)
    

✅ 小贴士:我当初第一次配环境时,忘了激活虚拟环境,结果全局污染了一堆包。现在每次新建项目,第一件事就是 venv


三、核心概念:用大白话讲清楚后端三要素

1. 路由(Route) → URL 对应的功能

比如 /login 对应登录功能,/sign-in 对应签到功能。

2. 数据库模型(Model) → 存什么数据

  • 用户表:用户名、密码(加密!)、注册时间
  • 签到表:用户ID、签到日期

3. API 接口 → 前端和后端的“对话方式”

前端发请求(比如点击“签到”按钮),后端返回 JSON 数据(比如 { "status": "success", "days": 5 }


四、动手写代码:一步步搭建签到系统

第一步:定义数据模型(models.py)

# models.py
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime, date

db = SQLAlchemy()

class User(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)  # 实际应用需加密
    created_at = db.Column(db.DateTime, default=datetime.utcnow)

class SignInRecord(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    sign_in_date = db.Column(db.Date, default=date.today)
    __table_args__ = (db.UniqueConstraint('user_id', 'sign_in_date'),)

🔒 安全提醒:真实项目中密码必须用 bcrypthashlib 加密!这里为简化先明文存储(仅用于学习)。

第二步:编写主程序(app.py)

# app.py
from flask import Flask, request, jsonify
from models import db, User, SignInRecord
from datetime import date

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///sign_in.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db.init_app(app)

# 首次运行时创建表
@app.before_first_request
def create_tables():
    db.create_all()

# 注册
@app.route('/register', methods=['POST'])
def register():
    data = request.json
    username = data.get('username')
    password = data.get('password')
    
    if User.query.filter_by(username=username).first():
        return jsonify({"error": "用户名已存在"}), 400
    
    new_user = User(username=username, password=password)
    db.session.add(new_user)
    db.session.commit()
    return jsonify({"message": "注册成功"}), 201

# 登录(简化版,无 token)
@app.route('/login', methods=['POST'])
def login():
    data = request.json
    user = User.query.filter_by(
        username=data['username'],
        password=data['password']
    ).first()
    if user:
        return jsonify({"user_id": user.id}), 200
    return jsonify({"error": "用户名或密码错误"}), 401

# 签到
@app.route('/sign-in', methods=['POST'])
def sign_in():
    user_id = request.json.get('user_id')
    today = date.today()
    
    # 检查今天是否已签到
    record = SignInRecord.query.filter_by(
        user_id=user_id,
        sign_in_date=today
    ).first()
    
    if record:
        return jsonify({"message": "今天已签到"}), 200
    
    new_record = SignInRecord(user_id=user_id)
    db.session.add(new_record)
    db.session.commit()
    
    # 计算连续签到天数(简化:只查最近7天)
    total_days = SignInRecord.query.filter_by(user_id=user_id).count()
    return jsonify({"message": "签到成功", "total_days": total_days}), 200

# 运营接口:查看所有用户签到情况
@app.route('/admin/users', methods=['GET'])
def get_all_users():
    users = User.query.all()
    result = []
    for u in users:
        days = SignInRecord.query.filter_by(user_id=u.id).count()
        result.append({
            "username": u.username,
            "total_sign_in_days": days,
            "registered_at": u.created_at.strftime("%Y-%m-%d")
        })
    return jsonify(result), 200

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

第三步:运行并测试

  1. 终端执行:

    python app.py
    

    你会看到:Running on http://127.0.0.1:5000

  2. curl 或 Postman 测试接口(这里用 curl 示例):

# 注册
curl -X POST http://127.0.0.1:5000/register \
  -H "Content-Type: application/json" \
  -d '{"username":"alice","password":"123456"}'

# 登录
curl -X POST http://127.0.0.1:5000/login \
  -H "Content-Type: application/json" \
  -d '{"username":"alice","password":"123456"}'
# 返回 {"user_id": 1}

# 签到
curl -X POST http://127.0.0.1:5000/sign-in \
  -H "Content-Type: application/json" \
  -d '{"user_id":1}'

# 运营查看
curl http://127.0.0.1:5000/admin/users

💡 你已经完成了一个具备“用户行为 + 运营视角”的后端系统!虽然简陋,但逻辑完整。


五、新手常见问题解答(Q&A)

问题 原因 解决方案
报错 No module named flask 未激活虚拟环境或未安装依赖 确保执行 venv\Scripts\activate 后再 pip install
数据库文件没生成 未触发 create_all() 访问任意接口(如 /register)会自动建表
中文乱码 Flask 默认返回 UTF-8,但终端不支持 在 Postman 或浏览器中测试,或设置 app.config['JSON_AS_ASCII'] = False
密码明文太危险 教程为简化省略加密 学完后立即补上 werkzeug.security.generate_password_hash
如何部署? 本地只能自己访问 后续可学 Docker + Nginx + Gunicorn 部署到云服务器

六、下一步学习建议:从玩具项目走向真实世界

这个小项目只是起点。如果你想真正走上“代码人生”,我建议按以下路径进阶:

📌 技术深化路线

  1. 安全加固:加入 JWT token、密码哈希、SQL 注入防护
  2. 前端联调:用 Vue/React 写个简单页面,调用你的 API
  3. 日志与监控:记录谁在什么时候做了什么(运营审计刚需)
  4. 自动化测试:用 pytest 写单元测试,避免改一处崩全线

📌 运营思维培养

  • 思考:如果用户连续7天签到送积分,你怎么改代码?
  • 设计:如何防止用户脚本刷签到?(比如加 IP 限制、验证码)
  • 分析:从 /admin/users 的数据中,你能看出哪些用户活跃度规律?

📌 我的避坑指南

  • ❌ 不要一上来就学微服务、K8s——先把单体应用搞透
  • ✅ 每学一个概念,立刻写代码验证(哪怕只有5行)
  • ✅ 把项目代码传到 GitHub,写 README 说明功能(这是你未来的简历素材!)

结语:代码人生,始于一行可运行的代码

我写这篇教程,不是为了让你记住 Flask 的语法,而是想告诉你:技术探索的本质,是用代码解决真实问题。无论是做一个签到功能,还是支撑百万用户的电商系统,底层逻辑是一样的——理解需求、设计结构、编码实现、持续迭代。

后端不只是“写接口”,更是业务逻辑的骨架;运营也不只是“搞活动”,而是通过数据驱动产品进化。当你能同时站在技术和业务的角度思考,你就真正踏入了“代码人生”的大门。

现在,关掉这篇文章,打开你的编辑器,敲下 python app.py。你的第一个后端服务,正在等待启动。

作者:小林|211 CS研狗|技术博客写了50+篇,专注带新人少走弯路
如果你觉得有用,欢迎关注我的 GitHub(@lin-coder)或留言交流!

评论 0

最热最新
暂无评论
技术碎碎念Lv.1
0
影响力
0
文章
0
粉丝