django south [app]

本文详细介绍了Django迁移的概念及其基本用法,包括初始化一个应用、执行自动迁移、提交变更和数据迁移等关键步骤。同时,文章还提供了一些注意事项,如检查未执行的迁移和处理自定义字段的方法。

migrations的概念

migrations告诉django数据库的模式如何从一个版本update到另一个版本,用这些migrations可以讲数据库模式在版本之间切换

migrations基本用法

1)初始化一个app
    ./manage.py schemamigration southtest --initial
    这时候在southtest的目录下就有了文件夹migrations
2)其他的时候用
    ./manage.py schemamigration southtest --auto
3)最后提交变更用
    ./manage.py migrate southtest 数据库变更

4)south 能检测到并且修改的改动:
增加了一个field
unique=True
ManyToMany field
Custiom fields得自己定义,south没这么智能
    自定义Field 查看south文档的第四章Custom Fields

****查看可以执行的migration*很重要***
./manage.py migrate --list | grep -v "*"
southtut
(*) 0001_initial
(*) 0002_auto__add_field_knight_dances_whenever_able
(*) 0003_auto__add_field_knight_shrubberies
( ) 0004_auto__add_unique_knight_name
有*号标识已经执行过的
用./mange.py migrate myapp 0001 --fake 来假执行一个migration。

让现有的App来用south

./manage.py convert_to_south myapp

数据迁移

1)先运行 ./manage.py datamigration southtest (name)  name为脚本描述的名称
2)然后找到 migration 文件下的 00x_name.py 
    def forwards(self,orm):
        import ....
        for i in orm.User.objects.all():
            i.name = i.name+'!!'
            i.save()
    def backwards(self,orm):
        raise RuntimeError("cannot reverse this migration.")

说明:数据迁移的时候如果想冻结其他的model 只要传参数 在datamigration 后面传参数--freeze appname 即可 {还没有试过}

我们该注意的事项

1)在执行migrate操作的时候先使用 migrate app --list 看看有哪些还没执行过。然后在此app中找到migration文件中没有执行的文件,看看是由有必要执行, 没必要执行的时候之间./manage.py myapp (name) --fake 来跳过 2)很多field 没有定义default的时候,运行./manage.py migrate 的时候要求输入默认值,一般给""或者0。更好的习惯是直接赋值一个default
### 创建 Django 项目中的新 AppDjango 中,App 是构建 Web 应用程序的基本模块。以下是创建和配置新 App 的详细方法。 #### 1. 创建新的 Django App 使用 `django-admin` 或 `python manage.py` 命令来创建一个新的 App。命令格式如下: ```bash python manage.py startapp <app_name> ``` 例如,如果要创建一个名为 `myapp` 的 App,可以运行以下命令: ```bash python manage.py startapp myapp ``` 此命令会在项目的根目录下生成一个名为 `myapp` 的文件夹,其中包含以下文件结构[^2]: ``` myapp/ __init__.py admin.py apps.py migrations/ __init__.py models.py tests.py views.py ``` #### 2. 配置 `settings.py` 创建 App 后,需要将其添加到项目的 `INSTALLED_APPS` 列表中。打开 `settings.py` 文件,并在 `INSTALLED_APPS` 列表中添加新 App 的名称。例如: ```python INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'myapp', # 新添加的 App 名称 ] ``` #### 3. 配置模板路径 如果新 App 需要使用模板文件,可以在 `TEMPLATES` 设置中修改 `'DIRS'` 参数。确保模板路径指向全局的 `templates` 文件夹或 App 内部的模板文件夹。例如: ```python TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], # 全局模板路径 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] ``` 如果模板位于 App 内部,则无需修改 `'DIRS'` 参数,因为 `'APP_DIRS': True` 已经会自动查找每个 App 下的 `templates` 文件夹[^1]。 #### 4. 数据库配置 如果 App 包含模型(models),需要在 `settings.py` 中配置数据库连接。默认情况下,Django 使用 SQLite 数据库。如果需要更改数据库类型,可以修改 `DATABASES` 配置。例如: ```python DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } } ``` #### 5. 定义模型 在 `models.py` 文件中定义数据模型。例如: ```python from django.db import models class ExampleModel(models.Model): name = models.CharField(max_length=100) created_at = models.DateTimeField(auto_now_add=True) def __str__(self): return self.name ``` #### 6. 迁移数据库 定义模型后,需要通过迁移将模型同步到数据库中。执行以下命令: ```bash python manage.py makemigrations python manage.py migrate ``` ### 注意事项 - 确保 App 名称唯一且符合 Python 标识符规则。 - 如果 App 需要使用静态文件或媒体文件,需在 `settings.py` 中配置 `STATIC_URL` 和 `MEDIA_URL`[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值