1. 网吧管理系统开发背景与需求分析
网吧作为提供上网服务的公共场所,其管理系统需要兼顾经营效率与用户体验。传统的手工登记方式早已无法满足现代网吧的运营需求,特别是在会员管理、上机计时、消费结算等核心环节。一套完善的网吧管理系统应当具备以下核心功能模块:
- 会员管理:支持会员注册、充值、消费记录查询
- 上机控制:实现开机、计时、自动锁屏、强制下线
- 计费系统:灵活设置不同时段费率,自动计算消费金额
- 设备管理:监控电脑使用状态,远程控制开关机
- 数据统计:生成营业报表,分析经营状况
使用Python+Django开发这类系统具有明显优势:Django自带强大的后台管理界面,可以快速搭建管理员操作面板;Python丰富的第三方库能够轻松处理各种业务逻辑;ORM特性让数据库操作变得简单高效。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统开发环境搭建
2.1 Python环境配置
推荐使用Python 3.8+版本进行开发,这是目前最稳定的Django支持版本。安装步骤:
- 从Python官网下载对应操作系统的安装包
- 安装时勾选"Add Python to PATH"选项
- 验证安装是否成功:
bash复制
python --version pip --version
2.2 Django框架安装
使用pip安装最新稳定版Django:
bash复制pip install django
创建项目骨架:
bash复制django-admin startproject netbar_management
cd netbar_management
python manage.py startapp member_system
2.3 数据库选择与配置
虽然Django默认使用SQLite,但对于网吧管理系统建议使用MySQL或PostgreSQL:
python复制# settings.py配置示例
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'netbar_db',
'USER': 'db_user',
'PASSWORD': 'secure_password',
'HOST': 'localhost',
'PORT': '3306',
}
}
3. 核心功能模块实现
3.1 会员管理系统设计
会员模型设计应考虑以下字段:
python复制# models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
class Member(AbstractUser):
balance = models.DecimalField(max_digits=10, decimal_places=2, default=0)
phone = models.CharField(max_length=20)
id_card = models.CharField(max_length=18)
register_time = models.DateTimeField(auto_now_add=True)
last_login_time = models.DateTimeField(auto_now=True)
class Meta:
verbose_name = '会员'
verbose_name_plural = '会员管理'
会员操作视图示例:
python复制# views.py
from django.views.generic import CreateView
from .models import Member
from .forms import MemberRegistrationForm
class MemberRegisterView(CreateView):
model = Member
form_class = MemberRegistrationForm
template_name = 'member/register.html'
success_url = '/member/login/'
3.2 上机控制模块实现
上机记录模型设计:
python复制class Computer(models.Model):
STATUS_CHOICES = [
('free', '空闲'),
('in_use', '使用中'),
('maintenance', '维护中')
]
name = models.CharField(max_length=50)
ip_address = models.CharField(max_length=15)
status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='free')
last_maintenance = models.DateField(null=True, blank=True)
class SessionRecord(models.Model):
member = models.ForeignKey(Member, on_delete=models.CASCADE)
computer = models.ForeignKey(Computer, on_delete=models.CASCADE)
start_time = models.DateTimeField(auto_now_add=True)
end_time = models.DateTimeField(null=True, blank=True)
fee = models.DecimalField(max_digits=8, decimal_places=2, default=0)
上机控制逻辑:
python复制def start_session(request, computer_id):
computer = get_object_or_404(Computer, pk=computer_id)
if computer.status != 'free':
return HttpResponseBadRequest("该电脑正在使用中")
# 检查会员余额
if request.user.balance <= 0:
return HttpResponseForbidden("余额不足,请充值")
# 创建上机记录
session = SessionRecord(
member=request.user,
computer=computer,
)
session.save()
# 更新电脑状态
computer.status = 'in_use'
computer.save()
return redirect('member:dashboard')
4. 计费系统实现
4.1 费率设置模型
python复制class FeeRate(models.Model):
name = models.CharField(max_length=50)
start_time = models.TimeField()
end_time = models.TimeField()
weekday = models.PositiveSmallIntegerField() # 0-6表示周一到周日
rate = models.DecimalField(max_digits=5, decimal_places=2)
class Meta:
unique_together = ('start_time', 'end_time', 'weekday')
4.2 实时计费逻辑
python复制from datetime import datetime, time
def calculate_fee(session):
now = datetime.now()
current_time = now.time()
weekday = now.weekday()
# 获取适用的费率
rate = FeeRate.objects.filter(
start_time__lte=current_time,
end_time__gt=current_time,
weekday=weekday
).first()
if not rate:
rate = FeeRate.objects.filter(is_default=True).first()
# 计算已上机时长(分钟)
duration = (now - session.start_time).total_seconds() / 60
# 计算费用
return duration * rate.rate
5. 系统安全与权限控制
5.1 用户认证系统
Django自带的认证系统已经足够强大,我们只需进行适当定制:
python复制# settings.py
AUTH_USER_MODEL = 'member_system.Member'
LOGIN_URL = '/member/login/'
LOGIN_REDIRECT_URL = '/member/dashboard/'
LOGOUT_REDIRECT_URL = '/'
5.2 权限管理
python复制# 管理员权限装饰器示例
from django.contrib.auth.decorators import user_passes_test
def admin_required(view_func):
return user_passes_test(
lambda u: u.is_staff,
login_url='/member/login/'
)(view_func)
6. 前端界面实现
6.1 使用Bootstrap快速搭建界面
html复制<!-- 会员登录界面示例 -->
{% extends 'base.html' %}
{% block content %}
<div class="container mt-5">
<div class="row justify-content-center">
<div class="col-md-6">
<div class="card">
<div class="card-header">
<h4>会员登录</h4>
</div>
<div class="card-body">
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="btn btn-primary">登录</button>
</form>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
6.2 实时状态展示
使用Django模板和简单JavaScript实现状态更新:
javascript复制// 实时更新余额和上机时间
function updateSessionInfo() {
fetch('/api/member/current_session/')
.then(response => response.json())
.then(data => {
document.getElementById('balance').textContent = data.balance;
document.getElementById('session_duration').textContent = data.duration;
});
}
setInterval(updateSessionInfo, 60000); // 每分钟更新一次
7. 系统部署与优化
7.1 生产环境部署
推荐使用Nginx + Gunicorn部署Django应用:
bash复制# 安装Gunicorn
pip install gunicorn
# 启动命令
gunicorn --bind 0.0.0.0:8000 netbar_management.wsgi:application
Nginx配置示例:
nginx复制server {
listen 80;
server_name netbar.example.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /static/ {
alias /path/to/your/static/files/;
}
}
7.2 性能优化建议
-
启用数据库连接池:
bash复制
pip install django-db-geventpoolpython复制DATABASES = { 'default': { 'ENGINE': 'django_db_geventpool.backends.mysql', # ...其他配置... 'OPTIONS': { 'MAX_CONNS': 20, } } } -
使用缓存提升性能:
python复制CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.redis.RedisCache', 'LOCATION': 'redis://127.0.0.1:6379/1', } }
8. 实际开发中的经验分享
-
会员卡号生成策略:不要使用简单的自增ID,建议采用"前缀+随机数"的方式生成会员卡号,如"NB" + 8位随机数字,避免被猜测。
-
上机记录清理:定期归档历史记录,可以创建一个管理命令:
python复制from django.core.management.base import BaseCommand from django.utils import timezone from datetime import timedelta from .models import SessionRecord class Command(BaseCommand): help = '清理90天前的上机记录' def handle(self, *args, **options): cutoff_date = timezone.now() - timedelta(days=90) records = SessionRecord.objects.filter(end_time__lt=cutoff_date) count = records.count() records.delete() self.stdout.write(f'成功删除{count}条记录') -
并发控制:在上机操作时添加锁机制,避免同一台电脑被多人同时选择:
python复制from django.db import transaction @transaction.atomic def start_session(request, computer_id): computer = Computer.objects.select_for_update().get(pk=computer_id) # ...其余逻辑... -
日志记录:详细记录关键操作,便于问题排查:
python复制import logging logger = logging.getLogger(__name__) try: # 业务逻辑 except Exception as e: logger.error(f'上机操作失败: {str(e)}', exc_info=True) raise -
测试建议:网吧管理系统需要特别注意以下测试场景:
- 会员余额不足时的上机请求处理
- 跨费率时段的计费准确性
- 同一会员在多台设备同时登录的情况
- 管理员强制下线的各种边界条件
