Django实践-03模型-02基于admin管理表

简介: Django实践-03模型-02基于admin管理表

Django实践-03模型

官网:https://www.djangoproject.com/

博客:https://www.liujiangblog.com/

git:https://gitcode.net/mirrors/jackfrued/Python-100-Days


image.png


Django静态文件问题备注:


官网:https://www.djangoproject.com/

博客:https://www.liujiangblog.com/

git:https://gitcode.net/mirrors/jackfrued/Python-100-Days


Django静态文件问题备注:

参考:

Django测试开发-20-settings.py中templates配置,使得APP下的模板以及根目录下的模板均可生效

解决django 多个APP时 static文件的问题


django.short包参考:https://docs.djangoproject.com/en/4.1/topics/http/shortcuts/


利用Django后台管理模型

在创建好模型类之后,可以通过Django框架自带的后台管理应用(admin应用)实现对模型的管理。


1. 将admin应用所需的表迁移到数据库中。

python manage.py makemigrations
python manage.py migrate

(vip3-django) E:\vscode\vip3-django\djangoproject>python manage.py makemigrations

Migrations for ‘polls’:

polls\migrations\0001_initial.py

- Create model Subject

- Create model Teacher

(vip3-django) E:\vscode\vip3-django\djangoproject>python manage.py migrate

Operations to perform:

Apply all migrations: admin, auth, contenttypes, polls, sessionsRunning migrations:

Applying contenttypes.0001_initial… OK

Applying auth.0001_initial… OK

Applying admin.0001_initial… OK

Applying admin.0002_logentry_remove_auto_add… OK

Applying admin.0003_logentry_add_action_flag_choices… OK

Applying contenttypes.0002_remove_content_type_name… OK

Applying auth.0002_alter_permission_name_max_length… OK

Applying auth.0003_alter_user_email_max_length… OK

Applying auth.0004_alter_user_username_opts… OK

Applying auth.0005_alter_user_last_login_null… OK

Applying auth.0006_require_contenttypes_0002… OK

Applying auth.0007_alter_validators_add_error_messages… OK

Applying auth.0008_alter_user_username_max_length… OK

Applying auth.0009_alter_user_last_name_max_length… OK

Applying auth.0010_alter_group_name_max_length… OK

Applying auth.0011_update_proxy_permissions… OK

Applying auth.0012_alter_user_first_name_max_length… OK

Applying polls.0001_initial… OK

Applying sessions.0001_initial… OK


2. 创建访问admin应用的超级用户账号,

这里需要输入用户名、邮箱和口令。


python manage.py createsuperuser

22911549e399343f70e0bbd5ea3a567e_6bc5ece984dc43f0a8612e81538a333c.png


说明:输入口令时没有回显也不能退格。


3. 运行项目

python manage.py runserver

在浏览器中访问

http://127.0.0.1:8000/admin

输入刚才创建的超级用户账号admin和密码admin进行登录。


81a43621bed12c9a9c652df0fd62ab0e_a8313985da2e438c8b3326d9b27143e6.png

c73abe0225e4ab94eb6cea2cdc2670af_6e45df25cdbd4b6ab910e64124c6b821.png


4.注册模型类

我们暂时还没能在admin应用中看到之前创建的模型类,为此需要在polls应用的admin.py文件中对需要管理的模型进行注册。


from django.contrib import admin
from polls.models import Subject, Teacher
admin.site.register(Subject)
admin.site.register(Teacher)

刷新


http://127.0.0.1:8000/admin

272758d41b723bdc69509939976203df_2ff626e64e03490a89a0a71c2d24b791.png

注册模型类后,就可以在后台管理系统中看到它们。可以在管理员平台对模型进行C(新增)、R(查看)、U(更新)、D(删除)操作,如下图所示。


bcb6ba5212e0970aec1b32d521f9f93e_32895351177e444f8a2b0405b0a475d4.png

5.对模型进行CRUD操作。

注册模型管理类。


可能大家已经注意到了,刚才在后台查看部门信息的时候,显示的部门信息并不直观,为此我们再修改admin.py文件,通过注册模型管理类,可以在后台管理系统中更好的管理模型。


from django.contrib import admin
from polls.models import Subject, Teacher
class SubjectModelAdmin(admin.ModelAdmin):
    list_display = ('no', 'name', 'intro', 'is_hot')
    search_fields = ('name', )
    ordering = ('no', )
class TeacherModelAdmin(admin.ModelAdmin):
    list_display = ('no', 'name', 'sex', 'birth', 'good_count', 'bad_count', 'subject')
    search_fields = ('name', )
    ordering = ('no', )
admin.site.register(Subject, SubjectModelAdmin)
admin.site.register(Teacher, TeacherModelAdmin)

3c5f55de54f532b667a7b24bdbecd35f_870c817bfb544458a5558128b3df5b9f.png

为了更好的查看模型,我们为Subject类和Teacher类添加__str__魔法方法,并在该方法中返回学科名字。


    def __str__(self) -> str:
        return self.name

87036eb3eb86ac8fad53a29135ce7e37_2325db17dc2e4610ab72d97fe07e7738.png


6.实现学科页和老师页效果

1. 修改polls/views.py文件。

修改polls/views.py文件,编写视图函数实现对学科页和老师页的渲染。


from django.shortcuts import render
from django.shortcuts import redirect
# Create your views here.
from polls.models import Subject, Teacher
def show_subjects(request):
    subjects = Subject.objects.all().order_by('no')
    return render(request, 'polls/subjects.html', {'subjects': subjects})
def show_teachers(request):
    try:
        sno = int(request.GET.get('sno'))
        teachers = []
        if sno:
            subject = Subject.objects.only('name').get(no=sno)
            teachers = Teacher.objects.filter(subject=subject).order_by('no')
        return render(request, 'polls/teachers.html', {
            'subject': subject,
            'teachers': teachers
        })
    except (ValueError, Subject.DoesNotExist):
        return redirect('/')

2.修改templates/polls/subjects.html和tteachers.html模板页

为便于按照博客练习,页面已经一次性写好,内容如下:

参考:Django实践-03模型-01表生成模型+学科页面与教师页面编写


3.访问

http://127.0.0.1:8000/

8cd80be4a0ddf82c5eb36fe9538c3c31_347827abb50c4de3b7bf778ba62ead85.png


点击Python全栈+人工智能学科的老师信息跳转到

http://127.0.0.1:8000/teachers/?sno=1

a699f00fc5903b406015e254f6c3893a_fbdd0e6c226b4d0aa04b5518bc168acb.png


到此为止,页面上需要的图片(静态资源)还没有能够正常展示,我们在下一章节中为大家介绍如何处理模板页上的需要的静态资源。


django模块介绍

django.shortcuts.render

render(request, template_name, context=None, content_type=None, status=None, using=None

django.shortcuts.redirect

redirect(to, *args, permanent=False, **kwargs)


总结


本文主要是Django系列博客。本文是Django模型层models的使用过程。

1.基于实体类生成数据表

python manage.py makemigrations

python manage.py migrate

2.创建超级用户

python manage.py createsuperuser

3.把models交给后台admin管理 可优化

admin.site.register(Subject)

4.修改polls/views.py文件

5.修改templates/polls下的html文件

6.运行项目

python manage.py runserver

相关文章
|
3月前
|
SQL 数据库 索引
Django MTV - 模型层 - (专题)知识要点与实战案例
Django MTV - 模型层 - (专题)知识要点与实战案例
31 0
|
3月前
|
存储 安全 网络协议
Python 教程之 Django(9)对模型中的字段进行验证
Python 教程之 Django(9)对模型中的字段进行验证
30 0
Python 教程之 Django(9)对模型中的字段进行验证
|
3月前
|
API 数据库 Python
Python 教程之 Django(8)在 Django 管理界面中渲染模型
Python 教程之 Django(8)在 Django 管理界面中渲染模型
24 0
Python 教程之 Django(8)在 Django 管理界面中渲染模型
|
4月前
|
Python API 网络架构
Django实践-10RESTful架构和DRF入门
Django实践-10RESTful架构和DRF入门
Django实践-10RESTful架构和DRF入门
|
3月前
|
机器学习/深度学习 算法 TensorFlow
文本分类识别Python+卷积神经网络算法+TensorFlow模型训练+Django可视化界面
文本分类识别Python+卷积神经网络算法+TensorFlow模型训练+Django可视化界面
65 0
文本分类识别Python+卷积神经网络算法+TensorFlow模型训练+Django可视化界面
|
3月前
|
SQL 存储 API
Python 教程之 Django(7)Django 模型
Python 教程之 Django(7)Django 模型
48 1
Python 教程之 Django(7)Django 模型
|
3月前
|
搜索推荐 算法 前端开发
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
104 4
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
|
3天前
|
Python
使用Django时,如何设计模型关系(一对一、一对多、多对多)?
Django支持三种模型关联:ForeignKey(一对多),OneToOneField(一对一)和ManyToManyField(多对多)。ForeignKey示例:`Article`有一个指向`Author`的外键。OneToOneField示例:`UserProfile`与`User`一对一关联。ManyToManyField示例:`Student`和`Course`之间多对多关系。这些关联字段便于反向查询,如`article.author`获取作者,`author.article_set.all()`获取作者所有文章。
8 1
|
13天前
|
数据处理 数据库 开发者
Django中的自定义管理命令:扩展管理功能的途径
【4月更文挑战第15天】Django教程:介绍如何创建和使用自定义管理命令以扩展框架功能。在应用的`management/commands`目录下创建Python文件,继承`BaseCommand`,实现`handle`方法。示例代码展示了如何定义参数和执行逻辑。自定义命令适用于批量数据处理、定期任务、项目初始化和自定义迁移操作。注意文件位置、命令安全性和稳定性。自定义管理命令能提升开发和维护效率。
|
13天前
|
关系型数据库 API 数据库
Django中的数据库事务管理:确保数据一致性
【4月更文挑战第15天】Django框架提供强大的数据库事务管理,确保ACID属性,保证数据一致性和完整性。文章深入讨论了Django事务管理,包括使用`@transaction.atomic`装饰器和`transaction.atomic()`上下文管理器手动控制事务,以及低级API进行精细管理。注意避免长时间事务、选择合适隔离级别、正确处理异常及了解数据库特性。掌握这些技巧对构建可靠Web应用至关重要。