Django项目之模型

创建环境

创建Django项目,创建usersapp,并在setting.py中注册

  • 项目工作目录
    在这里插入图片描述

配置连接MySQL数据库

  • 修改/Djweb/Djweb/setting.py中DATABASE设置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'Djweb',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': 'localhost',
        'PORT': 3306
    }
}

并创建数据库

create database Djweb charset=utf8;

安装MySQL数据库依赖

>>pip install mysqlclient
Collecting mysqlclient
  Downloading mysqlclient-2.2.0-cp310-cp310-win_amd64.whl (199 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 199.9/199.9 kB 168.6 kB/s eta 0:00:00
Installing collected packages: mysqlclient
Successfully installed mysqlclient-2.2.0

创建表单

/Djweb/news/models.py

from django.db import models

# Create your models here.
"""
新闻类型表:
    news_type表:
        id:主键
        name:类型名称
新闻信息表:
     news_info表:
        id:主键
        title:标题
        content:内容
        read:阅读数据
        comment:评论数量
数据表之间的关系:
    一对一:OneToOneField、一对一,将字段定义在任意一端中
    一对多:ForeignKey、一对多,将字段定义在多的一端中
    多对多:ManyToManyField、多对多,将字段定义在任意一端中。
"""


class NewsType(models.Model):
    name = models.CharField(max_length=30, verbose_name='新闻类型', help_text='名称')


class NewsInfo(models.Model):
    title = models.CharField(max_length=100, verbose_name='标题', help_text='标题')
    content = models.TextField(max_length=100, verbose_name='内容', help_text='内容')
    read = models.IntegerField(verbose_name='阅读量', help_text='阅读量')
    comment = models.IntegerField(verbose_name='评论量', help_text='评论量')

    type = models.ManyToManyField('NewsType', verbose_name='新闻类型', help_text='新闻类型')

进行迁移

python manage.py makemigrations
Migrations for 'news':
  news\migrations\0001_initial.py
    - Create model NewsType
    - Create model NewsInfo

生成到数据库表单

python manage.py migrate

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, news, sessions
Running 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 news.0001_initial... OK
  Applying sessions.0001_initial... OK

此时数据库显示
在这里插入图片描述

  • 自定义显示数据库表名
    /Djweb/news/models.py
class NewsType(models.Model):
    name = models.CharField(max_length=30, verbose_name='新闻类型', help_text='名称')

    class Meta:
        # 指定生成的表名
        db_table = 'type'
        # 说明信息,再Django后台显示
        verbose_name = '类型'

class NewsInfo(models.Model):
    title = models.CharField(max_length=100, verbose_name='标题', help_text='标题')
    content = models.TextField(max_length=100, verbose_name='内容', help_text='内容')
    read = models.IntegerField(verbose_name='阅读量', help_text='阅读量')
    comment = models.IntegerField(verbose_name='评论量', help_text='评论量')

    type = models.ManyToManyField('NewsType', verbose_name='新闻类型', help_text='新闻类型')
    class Meta:
        # 指定生成的表名
        db_table = 'news'
        # 说明信息,再Django后台显示
        verbose_name = '新闻'

重新生成迁移文件,并生成数据库表
在这里插入图片描述

注册模型

  • /Djweb/news/admin.py
from django.contrib import admin
from .models import NewsInfo,NewsType
# Register your models here.
class NewsTypeAdmin(admin.ModelAdmin):
    list_display = ['id', 'name']

class NewsInfoAdmin(admin.ModelAdmin):
    list_display = ['id', 'title','content','read','comment']

admin.site.register(NewsInfo,NewsInfoAdmin)
admin.site.register(NewsType,NewsTypeAdmin)
  • 在命令行注册admin管理员账号
python manage.py createsuperuser

访问网站admin后台
在这里插入图片描述

  • 在类型页面与新闻页面构造测试数据
    在这里插入图片描述
  • 修改显示数据
    在这里插入图片描述
    在这里插入图片描述
    增加 str 方法
class NewsType(models.Model):
    name = models.CharField(max_length=30, verbose_name='新闻类型', help_text='名称')

    class Meta:
        # 指定生成的表名
        db_table = 'type'
        # 说明信息,再Django后台显示
        verbose_name = '类型'
    def __str__(self):
        return self.name

Django模型类查询

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

模型类的条件查询

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

聚合函数

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要提高Django项目中调用模型的并发性能,可以考虑以下几个方面的优化: 1. 使用异步任务:将耗时的模型调用操作转换为异步任务,可以减少每个请求的处理时间,提高并发处理能力。可以使用Django提供的异步任务队列框架,如Celery或Django Channels。 2. 数据库优化:考虑对数据库进行优化,如建立索引、使用适当的查询语句、合理划分数据表等,以减少数据库访问的开销。还可以考虑使用缓存技术,将频繁访问且不经常变化的数据缓存起来,减轻数据库负载。 3. 并发数据库连接:通过配置数据库连接池,允许多个并发连接到数据库,以提高并发性能。可以使用诸如PgBouncer或mysql-connector-py等连接池库。 4. 使用缓存:对于模型结果的频繁读取操作,可以使用缓存技术,将结果缓存在内存中,减少对模型的频繁调用。Django提供了内置的缓存框架,如Memcached或Redis。 5. 水平扩展:如果负载较大,可以考虑水平扩展,将应用部署到多台服务器上,并通过负载均衡器分发请求。这样可以增加并发处理能力,并提高整体性能。 6. 使用轻量级模型:如果模型本身较为复杂且耗时,可以考虑使用轻量级模型或简化模型结构,以减少计算和处理时间。 需要根据具体的项目需求和性能瓶颈来确定哪些优化策略适用,综合考虑可以提高Django项目中调用模型的并发性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七七高7777

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值