Python Django框架开发发布会签到系统(web开发)
1. 签到系统介绍
随着技术的发展,签到系统变得愈发普及,不仅限于学校、公司等场合使用,现在各类线下活动也都需要使用签到系统,以便于管理人员快速获取参与者的基本信息。
Python Django框架的出现,使得web开发变得更加高效和简洁。在Python Django框架的基础上,可以轻松开发一个签到系统。下面将介绍如何使用Python Django框架开发签到系统。
2. 开发环境准备
在开始开发前,需要准备以下环境:
Python 2.x 或 3.x
Django 2.x 或以上版本
MySQL 或 SQLite
3. 数据库设计
签到系统需要设计下列表:
用户表:用于记录用户的基本信息,例如姓名、工号等。
活动表:用于记录活动的基本信息,例如名称、时间等。
签到表:用于记录用户在活动中签到的时间。
在MySQL中创建表的代码如下:
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`job_number` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `activity` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`time` datetime NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `attendance` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`activity_id` int(11) NOT NULL,
`time` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`),
KEY `activity_id` (`activity_id`),
CONSTRAINT `attendance_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `attendance_ibfk_2` FOREIGN KEY (`activity_id`) REFERENCES `activity` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
);
4. Django项目结构
创建Django项目的命令如下:
django-admin startproject sign_in
创建完成后,项目的目录结构如下:
sign_in/
manage.py
sign_in/
__init__.py
settings.py
urls.py
wsgi.py
4.1 创建应用
为项目创建应用并命名为“attendance”,命令如下:
cd sign_in
python manage.py startapp attendance
命令执行后,将在项目的根目录下创建attendance目录,应用的目录结构如下:
attendance/
__init__.py
admin.py
apps.py
models.py
tests.py
views.py
migrations/
__init__.py
5. 编写模型
5.1 模型的定义
在attendance/models.py中添加如下代码,定义用户、活动和签到三张表的关系:
from django.db import models
class User(models.Model):
name = models.CharField(max_length=255)
job_number = models.CharField(max_length=255)
def __str__(self):
return self.name
class Activity(models.Model):
name = models.CharField(max_length=255)
time = models.DateTimeField()
def __str__(self):
return self.name
class Attendance(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
activity = models.ForeignKey(Activity, on_delete=models.CASCADE)
time = models.DateTimeField(auto_now_add=True)
def __str__(self):
return '{} attended {}'.format(self.user.name, self.activity.name)
5.2 数据库迁移
编写模型后,需要更新数据库,命令如下:
python manage.py makemigrations attendance
python manage.py migrate
6. 编写视图和模板
签到系统的主要功能是实现用户签到,因此需要编写签到页面和签到成功页面。视图函数的功能是渲染模板,将模板中的动态数据与静态数据结合起来展示给用户。
6.1 签到页面
在attendance/views.py中添加如下代码:
from django.shortcuts import render
from django.http import HttpResponse
from .models import User, Activity, Attendance
def sign_in(request):
if request.method == 'POST':
user_id = request.POST['user_id']
activity_id = request.POST['activity_id']
user = User.objects.get(id=user_id)
activity = Activity.objects.get(id=activity_id)
Attendance.objects.create(user=user, activity=activity)
return HttpResponse('Signed in successfully!')
else:
users = User.objects.all()
activities = Activity.objects.all()
return render(request, 'attendance/sign_in.html', {'users': users, 'activities': activities})
在attendance/templates/attendance目录下新建sign_in.html模板,并编写如下代码:
<!DOCTYPE html>
<html>
<head>
<title>Sign In</title>
</head>
<body>
<form method="post">
{% csrf_token %}
<label>Select your name:</label>
<select name="user_id">
{% for user in users %}
<option value="{{ user.id }}">{{ user.name }}</option>
{% endfor %}
</select><br>
<label>Select activity:</label>
<select name="activity_id">
{% for activity in activities %}
<option value="{{ activity.id }}">{{ activity.name }} - {{ activity.time }}</option>
{% endfor %}
</select><br>
<input type="submit" value="Sign in">
</form>
</body>
</html>
6.2 签到成功页面
在attendance/views.py中添加如下代码:
def sign_result(request):
return render(request, 'attendance/sign_result.html')
在attendance/templates/attendance目录下新建sign_result.html模板,并编写如下代码:
<!DOCTYPE html>
<html>
<head>
<title>Sign In Result</title>
</head>
<body>
<h1>Sign in success!</h1>
<p><a href="{% url 'sign_in' %}">Continue</a></p>
</body>
</html>
7. 配置路由
在attendance/urls.py中添加如下代码:
from django.urls import path
from . import views
urlpatterns = [
path('', views.sign_in, name='sign_in'),
path('sign_result/', views.sign_result, name='sign_result'),
]
将attendance应用的路由配置添加到主路由中,在sign_in/urls.py中添加如下代码:
from django.urls import include, path
urlpatterns = [
path('attendance/', include('attendance.urls')),
]
8. 运行项目
在命令行中执行如下命令启动Django服务:
python manage.py runserver
打开浏览器,访问http://127.0.0.1:8000/attendance,即可看到签到页面,选择用户名和活动后,点击“Sign in”按钮,即可完成签到。
9. 总结
本文介绍了如何使用Python Django框架开发签到系统。在开发过程中,需要编写模型、视图、模板和路由等代码,同时需要对数据库进行操作。Python Django框架的出现,使得web开发变得更加高效和简洁,为开发者带来了极大的便利。