最近心血来潮弄了个蔬菜(瓜果)采收管理应用。 在Windows操作系统上,采用Django搭建Web服务器中间件。前端使用VUE的示例部分CSS。
命令行窗口输入以下命令创建web站点,生成基本的Django配置文件:
>django-admin startproject mysite
mysite/ manage.py mysite/ __init__.py settings.py urls.py asgi.py wsgi.py
//跳转至项目根目录
>cd mysite
创建Django app:
>python manage.py startapp app
app/ __init__.py admin.py apps.py migrations/ __init__.py models.py tests.py views.py
在web站点根目录使用startapp命令,创建的app所有目录以该根目录为父目录。
然后,启动Django内置的测试服务器。
//默认端口是8000
>python manage.py runserver
//指定服务端口8080
>python manage.py runserver 8080
更多操作示例可以查看Django官方网站手册。
在Django app的urls.py添加路径路由寻址:
path('crop/<int:page_id>/', views.croplist, name='croplist'),
在该app的views.py添加croplist方法:
def croplist(request, page_id=1):
if page_id<=0 or page_id>=2147483648:
raise Http404('Oops! Page not found.')
return HttpResponse('To be continued...')
在models.py添加数据库table表对应的class类:
作物Crop:
class Crop(models.Model):
id=models.AutoField(primary_key=True)
vegetable=models.ForeignKey(Vegetable, on_delete=models.CASCADE)
sow_date=models.DateTimeField('sowing date')
tran_date=models.DateTimeField('transplant date')
count=models.IntegerField(default=1)
def __str__(self):
return self.id+'. '+self.vegetable.name+', '+self.sow_date.strftime('%Y/%m/%d')
蔬菜Vegetable:
class Vegetable(models.Model):
name=models.CharField(max_length=200)
english_name=models.CharField(max_length=200, default='')
nursery_period=models.IntegerField(default=16)
florescence=models.IntegerField(default=15)
fruit_period=models.IntegerField(default=15)
min_lifespan=models.IntegerField(default=30)
lifespan=models.IntegerField(default=60)
comment=models.CharField(max_length=200)
def __str__(self):
return self.name+', '+str(self.nursery_period)+'/'+str(self.lifespan)
数据库结构多次迭代完成后,提交到Django数据库管理系统。在操作系统命令行模式下,输入相关命令。
>python manage.py makemigrations myapp
>python manage.py sqlmigrate myapp 0001
>python manage.py migrate
应当注意数据的稳定性、完整性和一致性 ,避免无序重构数据库结构导致的数据混乱和数据库解构的灾难。
作物列表:
播种日期:
种植天数:
最早采摘期:
最晚采收期:
收获逾期天数:
最佳收获期剩余时间:
距离采摘期天数:
可采摘状态:
小苗:
发芽:
播种:
采收示警:
目前,仅完成作物列表静态展示模块。view代码没怎么组织,直接在views.py敲,虽仅153行略混乱,待上传。这里实现了作物状态与时间的二维关联。后续考虑引入Apache的ECharts或其他库实现更复杂的关联。
注:蔬菜种类和生长状态图片来源于网络搜索。
注:示例引用来源于Django Documentation -- https://docs.djangoproject.com/en/3.1/intro/tutorial01/