django第三方类库 - django-south 项目开始中就使用south方法

199、扩展Django之力:第三方库集成指南 本文介绍了如何在Django项目中集成第三方库,以扩展其功能和提高开发效率。通过具体案例,如使用django-admin-rangefilter增强管理后台筛选功能,django-formtools简化表单验证,django-adminpack改善数据库迁移管理,以及Celery实现异步任务处理,文章展示了第三方库在实际项目中的应用。同时,文章提出了使用第三方库的最佳实践和注意事项,强调了选择合适库的重要性,并鼓励开发者根据项目需求积极探索和应用Django的丰富第三方库生态。 阅读详情

提炼 http://south.readthedocs.org/en/latest/tutorial/part1.html 官方手册里面的步骤

在新项目中使用

第一步创建项目

django-admin.py startproject LearnSouth

创建app

django-admin.py startapp books

在learnSouth.settings中修改数据库

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'demo.db',                      # Or path to database file if using sqlite3.
        # The following settings are not used with sqlite3:
        'USER': '',
        'PASSWORD': '',
        'HOST': '',                      # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
        'PORT': '',                      # Set to empty string for default.
    }
}

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    # 'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    'south',
    'LearnSouth',
    'books',
)

命令行执行导入数据库

./manage.py syncdb


初始化迁移信息

./manage.py schemamigration book --initial

执行完以后会在books目录下看到1个migrations文件夹。里面保存了

0001_initial.py 打开看一下。暂时里面没有数据


修改models.py文件内容

from django.db import models

# Create your models here.

class XiaoShuo(models.Model):
    create_date = models.DateTimeField(auto_created=True)
    public_date = models.DateTimeField(auto_now=True)
    title = models.CharField(max_length=128)
    contnet = models.CharField(max_length=512000)

class Comment(models.Model):
    username = models.CharField(max_length=64)
    email = models.CharField(max_length=64)
    # email = models.EmailField()

执行

./manage.py schemamigration books --auto

查看migrations目录。发现生成

0002_auto_add_xiaoshuo_add_comment.py文件。代码为

class Migration(SchemaMigration):

    def forwards(self, orm):
        # Adding model 'XiaoShuo'
        db.create_table(u'books_xiaoshuo', (
            (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
            ('create_date', self.gf('django.db.models.fields.DateTimeField')()),
            ('public_date', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)),
            ('title', self.gf('django.db.models.fields.CharField')(max_length=128)),
            ('contnet', self.gf('django.db.models.fields.CharField')(max_length=512000)),
        ))
        db.send_create_signal(u'books', ['XiaoShuo'])

        # Adding model 'Comment'
        db.create_table(u'books_comment', (
            (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
            ('username', self.gf('django.db.models.fields.CharField')(max_length=64)),
            ('email', self.gf('django.db.models.fields.CharField')(max_length=64)),
        ))
        db.send_create_signal(u'books', ['Comment'])


    def backwards(self, orm):
        # Deleting model 'XiaoShuo'
        db.delete_table(u'books_xiaoshuo')

        # Deleting model 'Comment'
        db.delete_table(u'books_comment')


    models = {
        u'books.comment': {
            'Meta': {'object_name': 'Comment'},
            'email': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
            'username': ('django.db.models.fields.CharField', [], {'max_length': '64'})
        },
        u'books.xiaoshuo': {
            'Meta': {'object_name': 'XiaoShuo'},
            'contnet': ('django.db.models.fields.CharField', [], {'max_length': '512000'}),
            'create_date': ('django.db.models.fields.DateTimeField', [], {}),
            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
            'public_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
            'title': ('django.db.models.fields.CharField', [], {'max_length': '128'})
        }
    }

    complete_apps = ['books']

修改models.py代码为

class XiaoShuo(models.Model):
    create_date = models.DateTimeField(auto_created=True)
    public_date = models.DateTimeField(auto_now=True)
    title = models.CharField(max_length=128)
    contnet = models.CharField(max_length=512000)

class Comment(models.Model):
    username = models.CharField(max_length=64)
    email = models.CharField(max_length=64)
    # email = models.EmailField()

生成0003_auto_chg_field_comment_email.py

import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models


class Migration(SchemaMigration):

    def forwards(self, orm):

        # Changing field 'Comment.email'
        db.alter_column(u'books_comment', 'email', self.gf('django.db.models.fields.EmailField')(max_length=75))

    def backwards(self, orm):

        # Changing field 'Comment.email'
        db.alter_column(u'books_comment', 'email', self.gf('django.db.models.fields.CharField')(max_length=64))

    models = {
        u'books.comment': {
            'Meta': {'object_name': 'Comment'},
            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
            'username': ('django.db.models.fields.CharField', [], {'max_length': '64'})
        },
        u'books.xiaoshuo': {
            'Meta': {'object_name': 'XiaoShuo'},
            'contnet': ('django.db.models.fields.CharField', [], {'max_length': '512000'}),
            'create_date': ('django.db.models.fields.DateTimeField', [], {}),
            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
            'public_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
            'title': ('django.db.models.fields.CharField', [], {'max_length': '128'})
        }
    }

    complete_apps = ['books']

执行
./manage.py migrate books

把修改后的模型合并到字段。


在老项目中使用

首先把south添加到install_apps变量中。

然后执行

./manage.py syncdb

之后执行转换,south会假装执行合并过程

./manage.py convert_to_south myapp

项目拷贝到其他机器上使用的过程中。如果修改提交。必须要执行

./manage.py migrate myapp 0001 --fake

如果没有数据库的项目,则不需要以上步骤。只需要执行syncdb同步到db。


数据迁移

在实践项目中,对模型的的修改往往伴随数据的修改。

比如原有的用户表采用了明文密码。在新版本中需要修改为加密的密码。通常开发过程中需要后台和db的配合。

后台修改字段,db部分在修改。

这里south的强大之处就出来了。可以在代码中修改迁移数据。

注意:一定要备份数据库

下面说说使用demo

首先建立1个app

./manager.py startapp book2

之后在模型里面添加数据

from django.db import models

class User(models.Model):

    username = models.CharField(max_length=255)
    password = models.CharField(max_length=60)
    name = models.TextField()


初始化数据记录
./manage.py schemamigration --initial book2


合并到数据库

./manage.py migrate book2

添加数据

./manage.py shell

User.objects.create(username="andrew", password="ihopetheycantseethis", name="Andrew Godwin")

以上步骤模拟了在实际过程中第一版的开发和数据导入。

接下来更新版本。密码修改为加密部分。

首先修改模型

from django.db import models

# Create your models here.

import hashlib

class User(models.Model):

    username = models.CharField(max_length=255)
    # password = models.CharField(max_length=60)
    password_salt = models.CharField(max_length=8, null=True)
    password_hash = models.CharField(max_length=40, null=True)
    name = models.TextField()

    def check_password(self, password):
        return hashlib.sha1(self.password_salt + password).hexdigest() == self.password_hash


执行合并数据库

./manage.py schemamigration book2 --auto

下面是好玩的部分。新建1个数据迁移记录

./manage.py datamigration book2 hash_passwords

在 migrations文件夹下面生成1份0003_hash_password.py文件。

修改forwards函数。

def forwards(self, orm):
        "Write your forwards methods here."
        # Note: Don't use "from appname.models import ModelName". 
        # Use orm.ModelName to refer to models in this application,
        # and orm['appname.ModelName'] for models in other applications.
        import random, hashlib, string
        for user in orm.User.objects.all():
            user.password_salt = "".join([random.choice(string.letters) for i in range(8)])
            user.password_hash = hashlib.sha1(user.password_salt + user.password).hexdigest()
            user.save()

forwards函数里面。执行了修改密码,导入部分。

回退函数也修改

def backwards(self, orm):
        "Write your backwards methods here."
        raise RuntimeError("cannot reverse this migration.")

接下来删除models.py中原始的password字段。

执行合并

outekiMacBook-Air:LearnSouth watsy$ ./manage.py schemamigration book2 --auto
/Users/watsy/Documents/code/gitoschina/python/LearnSouth/book2/models.py:7: DeprecationWarning: the sha module is deprecated; use the hashlib module instead
  import sha

 ? The field 'User.password' does not have a default specified, yet is NOT NULL.
 ? Since you are removing this field, you MUST specify a default
 ? value to use for existing rows. Would you like to:
 ?  1. Quit now, and add a default to the field in models.py
 ?  2. Specify a one-off value to use for existing columns now
 ?  3. Disable the backwards migration by raising an exception.
 ? Please select a choice: 2
 ? Please enter Python code for your one-off default value.
 ? The datetime module is available, so you can do e.g. datetime.date.today()
 >>> ""
 - Deleted field password on book2.User
Created 0004_auto__del_field_user_password.py. You can now apply this migration with: ./manage.py migrate book2


执行合并到数据库

outekiMacBook-Air:LearnSouth watsy$ ./manage.py migrate book2
/Users/watsy/Documents/code/gitoschina/python/LearnSouth/book2/models.py:7: DeprecationWarning: the sha module is deprecated; use the hashlib module instead
  import sha

Running migrations for book2:
 - Migrating forwards to 0004_auto__del_field_user_password.
 > book2:0002_auto__add_field_user_password_salt__add_field_user_password_hash
 > book2:0003_hash_passwords
 - Migration 'book2:0003_hash_passwords' is marked for no-dry-run.
 > book2:0004_auto__del_field_user_password
 - Loading initial data for book2.
Installed 0 object(s) from 0 fixture(s)

测试执行以后的数据库是否修改密码成功

outekiMacBook-Air:LearnSouth watsy$ ./manage.py shell

>>> from book2.models import User
>>> User.objects.get(id=1).check_password("258841679")
True
>>> User.objects.get(id=1).check_password("fakepass")
False

测试修改成功~

强大的Django模型层插件:south详解 一、下载与安装 south安装包下载地址:https://bitbucket.org/andrewgodwin/south/ south文档:http://south.readthedocs.org/en/latest/ 二、south简介 Django 的第三方 app South 就是专门做数据库表结构自动迁移工作,Jacob Kaplan-Mo 阅读详情

相关推荐

Windows下Fortran调用CGNS库的完整踩坑实录:从HDF5、CMake到VS2019+IVF2020的保姆级配置

本文详细记录了在Windows环境下使用Fortran调用CGNS库的完整配置过程,涵盖HDF5安装、CMake配置、VS2019与IVF2020集成等关键步骤。通过实战经验分享,帮助开发者解决常见编译错误和链接问题,实现高效的Fortran与CGNS库集成。

weixin_28707739的博客 349

【Python三方库】Python之Django库的简介、安装、使用方法、示例代码、注意事项等详细攻略

Python之Django库的简介、安装、使用方法、示例代码、注意事项等详细攻略。在 Web 开发领域,Python 被广泛使用,其中 Django 是一个高效、全能的 Web 框架。Django 提供了许多内置的功能和模块,帮助开发者快速搭建和部署功能丰富、安全性高的网站和 Web 应用。本博客旨在介绍 Python 及其三方库 Django 的详细信息,包括 Django 的安装步骤、示例代码及使用注意事项。

科技改变人类,技术成就未来 1222

ISP模块之色彩增强算法--HSV空间Saturation通道调整

色彩增强不同于彩色图像增强,图像增强的一般处理方式为直方图均衡化等,目的是为了增强图像局部以及整体对比度。而色彩增强的目的是为了使的原有的不饱和的色彩信息变得饱和、丰富起来。对应于Photoshop里面的“色相/饱和度”调节选项里面对饱和度的操作。色彩增强的过程,并不改变原有彩色图像的颜色以及亮度信息。     在我的色彩增强算法模块里面,始终只针对色彩饱和度(Saturation)信息做研究,

松间明月 1万+

【Django】常用的第三方库,持续整理

【代码】【Django开发入门】常用的第三方库,持续整理。

黎明总是如期而至 610

深入解析车载以太网DoIP诊断:Wireshark实战TCP/UDS报文分析

本文深入解析车载以太网DoIP诊断,重点介绍如何利用Wireshark进行TCP/UDS报文实战分析。文章详细讲解了从以太网帧、IP帧、TCP段到DoIP协议及UDS服务的逐层拆解方法,并提供了使用Wireshark定位通信故障(如乱序、丢包、重传)的实用技巧,帮助工程师高效排查车载诊断网络问题。

c2d3e4f的博客 674

告别盲打:为NXOpen Python API生成智能代码提示的完整指南

本文提供了一份为NXOpen Python API生成智能代码提示的完整指南。通过配置匹配的Python环境、利用类型存根文件生成工具创建.pyi文件,并在PyCharm或VSCode中正确配置,开发者可以彻底告别“盲打”,获得精准的代码补全和参数提示,从而大幅提升NX二次开发的效率和体验。

weixin_29057695的博客 371

七、Django进阶:第三方库Django-extensions的开发使用技巧详解(附源码)

Django-extensions是 Django 的扩展应用,给django开发者提供了许多便捷的扩展工具(extensions),它提供了许多有用的工具和命令行工具,帮助 Django 开发者更高效地进行开发和调试。它的作用包括: - 提供了更多的Django命令,比如导出数据库、生成数据模型文档、查看URL路由表等; - 提供了一些有用的Django插件,比如shell_plus插件可以在Shell中自动导入项目的所有模块;

SteveRocket's-Blog 2154

残差检验_第三十讲 R语言-Cox比例风险模型的假设检验条件

在介绍完 Cox比例风险模型的详细理论和R实现以后(插入链接!!!),我们已经知道Cox比例风险模型可以较好的同时矫正多个混杂因素对结果的影响,同时我们遗留下来了一个问题:Cox比例风险模型的假设检验条件是什么?这一讲,我们将对此进行解答。请注意,如果使用不当,统计模型可能会产生误导性的结论。因此,检查给定的模型是否适合数据类型是非常重要的!1. Cox比例风险模型的假设条件Cox比例风险模型的成...

weixin_35476698的博客 8047

42、Django开发总结:总结收纳40+Django日常开发常用第三方库

总结收纳40+Django日常开发常用第三方库,总结收纳日常Django项目开发中增效的第三方组件库。

SteveRocket's-Blog 2070

GD-Link离线烧录全攻略:从配置到一键下载的保姆级教程

本文详细介绍了GD-Link离线烧录的全流程,从硬件准备到软件配置,再到一键下载的实战技巧。通过保姆级教程,帮助工程师快速掌握国产MCU的离线烧录技术,适用于产线批量烧录和现场设备维护等场景,显著提升工作效率。

ww90123的博客 649

SARscape的DInSAR全流程-以西安市隋大兴唐长安城遗址为例

通过DInSAR对西安市隋大兴唐长安城遗址开展的年度周期性监测,发现成因是地质内部构造断裂带活动所导致的地面产生物理空间上的形变,而地面的沉降与抬升是直接影响城市发展与文化遗产保护最为常见的缓变型不可逆地质灾害。西安市地处汾渭断陷盆地中部,受临潼-长安断裂带影响,导致区域内构造活动较为强烈。由于早年西安市地表水资源匮乏,从上世纪50年代末开始大量开采地下水资源以满足城市人口不断扩张的需求,从而导致地下承压含水层水位急速下降,形成多个局部沉降中心(八里村、西工大、电子城等)。

2301_77687129的博客 5810

Django框架中各种包的安装及其他插件下载

ModuleNotFoundError: No module named 'mdeditor' ModuleNotFoundError: No module named 'haystack' ModuleNotFoundError: No module named 'compressor'

weixin_46066806的博客 2538

基于深度学习的交通标志识别系统:使用YOLOv10、UI界面及自定义数据集的实现

实时检测和分类交通标志。提供一个友好的用户界面,方便用户上传图片或视频进行检测。收集和显示检测结果,以便进行进一步分析。YOLO(You Only Look Once)是一种高效的目标检测算法,它能够在一次前向传播中同时进行目标定位和分类。YOLOv10是YOLO系列的最新版本,具有更好的检测精度和速度。本项目成功实现了基于YOLOv10的交通标志检测与识别系统。通过实时检测与分类,系统能够有效识别出各种交通标志,为智能交通应用提供支持。

YOLO 1234

【课程设计】基于Python的高校图书管理系统的设计与实现 计算机毕业设计源码21646

系统的主要功能包括:普通用户可以进行注册与登录,浏览和借阅图书,查看个人借阅记录与归还记录,收藏图书并进行评论;管理员则可以管理用户信息、图书信息、图书分类、借阅与归还记录,并发布系统公告和图书资讯,保证系统的正常运行与资源更新。系统采用Django框架的MTV架构,结合MySQL数据库实现数据的高效存储与管理,确保了系统在高并发情况下的稳定性与可扩展性。....

Biye_Design的博客 4583

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Django 常用第三方插件大全

本教程全面盘点Django生态中最实用的第三方插件,涵盖开发调试、API构建、用户认证、后台管理、任务调度、文件处理等十一个核心类别。通过详细的功能解析、配置示例和最佳实践,帮助开发者快速集成高效开发工具链,提升项目质量和开发效率。

YAnt的博客 768

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

South在Django中使用

South概述 针对django自带的syncdb同步models和数据库的缺陷开发的数据迁移工具。 South可以作为syncdb的替代,South能够检测对models的更改并同步到数据库。 South基本用法 新建的项目使用South: 1. 安装完South之后,要在django项目中使用South,先要将South作为一个App导入项目,所以在Django项目的se

致远的专栏 1160

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

django 数据模型 导入数据库方法

提炼 http://south.readthedocs.org/en/latest/tutorial/part1.html 官方手册里面的步骤   在新项目中使用   第一步创建项目   django-admin.py startproject LearnSouth 创建app django-admin.py startapp books 在learnSouth.sett...

huiqinbo的专栏 1217

Django 有哪些常用的第三方库推荐

这些库覆盖了Django开发的多个方面,从认证授权到API构建,从表单处理到任务队列,都是Django开发者常用的工具。使用这些库可以显著提高开发效率和应用性能。在Django开发中,有许多第三方库可以帮助提高开发效率和代码质量。

2403_89114850的博客 565

Django常用的插件总结和介绍_django 插件,2024年最新吃透这份阿里P8纯手打Golang面经

不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

2401_84247760的博客 1118

六个优质开源项目,让你更了解Django框架开发

Django 是一个开源的 Web 应用框架,由 Python 写成。采用了 MTV 的框架模式,即模型 M,视图 V 和模版 T。它最初是被用来开发 CMS 软件的,所以 Django ...

大江狗 3483

python类库降级以及Django的xadmin

1、降级 python -m pip install --upgrade clsslib_name(类库名)==version(版本号) p2、ython3中直接安装xadmin会报错: UnicodeDecodeError: 'gbk' codec can't decode byte 0xa4 in position 3444: illegal multibyte sequence 3、...

junxieshiguan的博客 2596

python类库包括_python类库大全

广告关闭回望2020,你在技术之路上,有什么收获和成长么?对于未来,你有什么期待么?云+社区年度征文,各种定制好礼等你!pil(python imaging library,图像处理类库) 提供了通用的图像处理功能,以及大量有用的基本图像操作,比如:打开显示,灰度转换,图像缩放,旋转,裁剪等。 本文并包含 pil 所有功能模块的讲解,而是从实用角度给出最常用的方法。 要获取 pil 所有功能模块的...

weixin_39777213的博客 1050

如何在 Django 中使用 django-south,实现数据迁移

为什么80%的码农都做不了架构师?>>> ...

weixin_34132768的博客 191

django 1.8 mysql_mysql - 升级1.7.4到django 1.8 south.db.mysql错误,不使用南 - 堆栈内存溢出...

尝试从django的1.7.4升级到1.8; 但是,当我运行服务器时,我现在得到了There is no South database module 'south.db.mysql' for your database. Please either choose a supported database, check for SOUTH_DATABASE_ADAPTER[S] settings,...

weixin_28753647的博客 357

django-south

对于新的整个工程,数据表未建立,但代码齐全(部署时),只需要 python manage.py syncdb 即可建立所有的表(看提示是否有app,initial) 1、安装完South之后,要在django项目中使用South,先要将South作为一个App导入项目,所以设置INSTALL_APP添加south 第一次使用South。 2、manage.py syncdb 用来创建s

ling的专栏 943

Django开发必备的10个第三方库

以下的这几个第三方库,常用于Django开发中 使用好之后,就可以比较方便快速的开发对应的应用

MusicMan 1331
上一篇: 如何优雅的将数据从sqlite3迁移到mysql
下一篇: linux 远程连接ssh提示IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY解决
watsy
博客等级 码龄19年 133粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值