掘金 后端 ( ) • 2024-04-26 13:41

装包

命令:pip install -Ur requirements.txt 运行pip install -Ur requirements.txt命令时,pip会读取requirements.txt文件中的每个行,尝试安装或升级对应的Python包。这通常用于确保项目中有最新版本的依赖包,特别是在多人开发环境中,以确保每个开发者的环境都是一致的

-U:这个选项表示“upgrade”,即升级已安装的包。如果你使用这个选项,那么pip会安装或升级requirements.txt文件中列出的所有包。

数据库相关

修改主应用中setting.py中的数据库配置

修改`djangoblog/setting.py` 修改数据库配置,如下所示:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'djangoblog',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '127.0.0.1',
        'PORT': 3306,
    }
}

USER PASSWORD 是本机上的MySQL数据库连接用户名、密码; HOST PORT 是本机上MySQL服务启动时服务所在的域名与端口号

运行MySQL命令,创建数据库

CREATE DATABASE `djangoblog` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */;

创建一个名为djangoblog的数据库 /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */:这是一个注释,用于说明数据库的一些设置。这里指定了默认的字符集为utf8mb4,并且默认的排序规则(校对规则)为utf8mb4_unicode_ci。这通常是为了支持多语言字符集和排序需求

utf8mb4是UTF-8编码的一种变体,它支持存储所有Unicode字符,包括一些表情符号等。utf8mb4_unicode_ci是一个校对规则,用于字符串比较,确保在多语言环境中进行正确的比较。

运行相关的数据库迁移脚本

python manage.py makemigrations

在Django框架中,manage.py makemigrations 是一个命令行工具,用于生成数据库迁移脚本。这个命令是Django的迁移系统的一部分,用于处理数据库 schema 的变化。

当你在 Django 项目中添加、修改或删除模型字段时,Django 不会立即更新数据库。相反,它记录下这些变化,并在你运行 makemigrations 命令时生成一系列迁移脚本。每个迁移脚本都是一系列数据库操作,可以将数据库 schema 变更成新的状态。

python manage.py migrate

使用 migrate 命令时,Django 会按照迁移脚本的顺序应用它们,确保数据库 schema 逐步更新到最新状态。

应用管理相关的命令

python manage.py createsuperuser

在Django框架中,manage.py createsuperuser 是一个命令行工具,用于创建一个超级用户(Superuser)。超级用户拥有应用的所有权限,通常用于管理数据库和应用程序的其他方面。

当你创建一个新的Django项目或者迁移了一个现有的项目到一个新环境时,你可能需要创建一个超级用户账户,以便能够登录到Django的管理界面(Django Admin)并进行管理。

这个命令会提示你输入以下信息:

  • Username:超级用户的用户名。
  • Email address:超级用户的电子邮件地址。
  • Password:超级用户的密码。
  • Confirm password:确认密码(为了确保你输入的密码正确)。

创建超级用户后,你可以使用这个用户账户登录到Django的管理界面,并进行各种管理任务,如添加、编辑或删除对象等。

需要注意的是,创建超级用户通常是在开发环境中进行的。在生产环境中,你可能会使用不同的方法来管理用户账户,并且可能会实施更严格的安全措施。

Django命令相关

python代码中执行django管理命令

from django.core.management import call_command

在 Django 中,from django.core.management import call_command 这行代码是用来导入 Django 管理模块中的 call_command 函数。这个函数是 Django 管理接口的一部分,它允许你从 Python 代码中调用 Django 的管理命令。

Django 的管理命令是一系列可以通过命令行接口执行的任务,如迁移数据库、运行测试、生成静态文件等。通常,这些命令是通过在 manage.py 脚本中调用 execute_from_command_line(sys.argv) 来启动的。

然而,有时你可能需要在 Python 代码中直接执行某个管理命令,而不是通过命令行。这就是 call_command 函数的用处。你可以使用 call_command 来在程序内部调用任何管理命令,而不需要交互式地运行 manage.py 脚本。

自定义Django管理命令

在项目主应用文件夹下新建一个commands python模块,在该模块下新建一个create_testdata.py文件,文件的内容如下

from django.contrib.auth import get_user_model
from django.contrib.auth.hashers import make_password
from django.core.management.base import BaseCommand

from blog.models import Article, Tag, Category


class Command(BaseCommand):
    help = 'create test datas'

    def handle(self, *args, **options):
        user = get_user_model().objects.get_or_create(
            email='[email protected]', username='测试用户', password=make_password('test!q@w#eTYU'))[0]

        pcategory = Category.objects.get_or_create(
            name='我是父类目', parent_category=None)[0]

        category = Category.objects.get_or_create(
            name='子类目', parent_category=pcategory)[0]

        category.save()
        basetag = Tag()
        basetag.name = "标签"
        basetag.save()
        for i in range(1, 20):
            article = Article.objects.get_or_create(
                category=category,
                title='nice title ' + str(i),
                body='nice content ' + str(i),
                author=user)[0]
            tag = Tag()
            tag.name = "标签" + str(i)
            tag.save()
            article.tags.add(tag)
            article.tags.add(basetag)
            article.save()

        from djangoblog.utils import cache
        cache.clear()
        self.stdout.write(self.style.SUCCESS('created test datas \n'))

Django会自动发现并注册所有符合特定规则的管理命令。这些规则包括:

  • 命令类必须继承自 django.core.management.base.BaseCommand
  • 命令类必须有一个名为 handle 的方法,这个方法包含命令的具体逻辑。
  • 命令类可以有一个 help 属性,用于提供命令的帮助信息。

当你运行 manage.py 脚本时,它会加载项目中定义的所有管理命令。这时当执行python manage.py create_testdata命令时就可以执行create_testdata.py的逻辑

静态资源相关

python manage.py collectstatic --noinput

python manage.py collectstatic: 这个命令会遍历你的 Django 项目的每个应用,查找静态文件(每个应用下的static目录下的文件),并将它们收集到一个指定的目录中。这个目录通常是在你的 settings.py 文件中通过 STATIC_ROOT 设置的。 --noinput: 这个选项告诉 collectstatic 命令在执行时不要提示用户输入。通常,collectstatic 命令在找到新的或修改过的静态文件时会询问你是否想要覆盖目标目录中的文件。使用 --noinput 选项,你会自动接受所有文件的覆盖。

python manage.py compress --force

当你运行 python manage.py compress --force 命令时,以下几件事情会发生:

  1. python manage.py compress: 这个命令会检查你的静态文件,并且对那些可以压缩的文件(通常是 CSS 和 JavaScript 文件)进行处理。如果文件已经被压缩,并且自上次压缩以来没有发生变化,那么它不会被重新压缩。
  2. --force: 这个选项告诉 compress 命令忽略缓存,强制重新压缩所有静态文件。即使文件已经被压缩过,如果使用了 --force 选项,Django 还是会重新压缩这些文件。这对于在修改了源文件后确保压缩版本的文件能被更新很有用。

运行项目

python manage.py runserver

运行 python manage.py runserver 后,Django 会启动一个 WSGI(Web Server Gateway Interface)服务器,通常使用 Django 的开发服务器 django.core.wsgi.get_wsgi_application()。这个服务器会监听指定的端口,默认是 8000,并且会在控制台输出一些启动信息。 命令参数:

  • --noreload:禁用自动重新加载功能。默认情况下,如果代码发生变化,开发服务器会自动重新加载。
  • --nothreading:禁用多线程。默认情况下,Django 开发服务器会使用多线程来处理请求,这样可以同时处理多个请求。如果你遇到问题,可以尝试禁用多线程。
  • --nodjango:禁用 Django 应用。这个参数通常用于测试,它允许你运行一个不包含 Django 应用的 WSGI 应用。
  • --port:指定一个端口来运行开发服务器,而不是默认的 8000
  • --settings:指定一个 Django 设置模块来使用,而不是 settings.py 文件中定义的默认设置。

请注意,runserver 命令不应该在生产环境中使用。它仅适用于开发和测试目的。在生产环境中,你应该使用更稳定和可扩展的 Web 服务器,如 Nginx 或 Apache,并使用 WSGI 中间件(如 Gunicorn)来运行你的 Django 应用。