通过Django设计一个员工管理系统,练习Django项目的创建。通过学习B站武沛齐老师视频制作。很基础的知识,仅供自己记录学习,大神勿喷,谢谢。
环境:python 3.8,Django 3.2.16
1、在settings.py中删除默认模板的路径:
2、删除templates模板文件夹,等创建了新APP,在新APP中创建模板文件目录和静态文件目录。后面会提到。
1、方法一:
python mamage.py startapp app01(app01为项目名)
2、方法二:
还可以通过pycharm-tools-run manage.py task调出调试窗口,pycharm自动执行了python manage.py,可以在这个创空中执行创建APP的命令:startapp app01
3、在settings.py中进行app01的注册:
- INSTALLED_APPS = [
- 'app01.apps.App01Config'
- ]
项目启动前,设计表结构,在models.py中设计表
1、设计一个部门表
- class Department(models.Model):
- '''部门表'''
- title = models.CharField(verbose_name="标题",max_length=32)
2、需要注意的一些事项:级联删除和置空
这里关联部门表,要进行约束,只能是部门表中已经存在的ID,这样写没有约束 depart_id = models.BigIntegerField(verbose_name="部门ID") 有约束的写法: to,表示与哪个表关联,to_field表示与哪个列进行关联 django的自动操作,会在mysql中会自动将depart,生成depart_id,这个名字作为表格的内部名字 如果部门删除了,关联的用户怎么处理:一种是删除用户,级联删除:on_delete=models.CASCADE(); depart = models.ForeignKey(to="Department",to_field="id",on_delete=models.CASCADE()) 一种是设置为空值,前提是这一列的值允许为空:null = True,blank = True depart =models.ForeignKey(to="Department",null=True,blank=True,on_delete=models.SET_NULL())
- class UserInfo(models.Model):
- '''员工表'''
- name = models.CharField(verbose_name="姓名",max_length=16)
- password = models.CharField(verbose_name="密码",max_length=64)
- age = models.IntegerField(verbose_name="年龄")
- #最长10位,小数位2位,默认是0
- account = models.DecimalField(verbose_name="账号余额",max_digits=10,decimal_places=2,default=0)
- creat_tiem = models.DateTimeField(verbose_name="入职时间")
-
- #这里要关联部门表,要进行约束,只能是部门表中已经存在的ID,这样写无约束
- #depart_id = models.BigIntegerField(verbose_name="部门ID")
-
- #有约束的写法: to,表示与哪个表关联,to_field表示与哪个列进行关联
- #django的自动操作,会在mysql中会自动将depart,生成depart_id,这个名字作为表格的内部名字
- #如果部门删除了,关联的用户怎么处理:一种是删除用户,级联删除:on_delete=models.CASCADE();
- depart = models.ForeignKey(to="Department",to_field="id",on_delete=models.CASCADE())
-
- #一种是设置为空值,前提是这一列的值允许为空:null = True,blank = True
- #depart = models.ForeignKey(to="Department",null=True,blank=True,on_delete=models.SET_NULL())
1、创建mysql数据库;
2、在settings.py中修改数据库的配置;
- DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.mysql',
- 'NAME': 'wang', #数据库名字
- 'USER':'root', #用户名
- 'PASSWORD':'123456', #密码
- 'HOST':'123.56.200.1XX', #数据库地址
- 'PORT':3306, #端口
- }
- }
3、数据库迁移;
可以通过pycharm -tools- run mamge.py task,打开调试窗口,输入如下命令:
makemigrations;
migrate;
1、在新创建的APP中创建static文件夹;
2、在新创建的APP中创建templates文件夹;
1、路由简单的来说就是根据用户请求的 URL 链接来判断对应的处理程序,并返回处理结果,也就是 URL 与 Django 的视图建立映射关系。Django 路由在 urls.py 配置,urls.py 中的每一条配置对应相应的处理方法。
2、路由分发(include)
存在问题:Django 项目里多个app目录共用一个 urls 容易造成混淆,后期维护也不方便。
解决:使用路由分发(include),让每个app目录都单独拥有自己的 urls。
步骤:
- #项目目录下urls中
- from django.urls import path,include
-
- urlpatterns = [
- path("app01/", include("app01.urls")),
- #APP中的urls
- from django.urls import path
- from app01 import views
-
- urlpatterns = [
- path('log/',views.content),