Django学习笔记第3记

来源:互联网 发布:mbd.baidu.com短域名 编辑:程序博客网 时间:2024/06/03 18:20
一、模型Models
1、MySQL
数据库perf.sasm3.net/database/
首先学习一下MySQL的常用命令和数据类型、格式
登录:
$ mysql -u 用户名 -p
Enter password:密码
创建数据库:
mysql->create database 数据库名
选择需要操作的数据库:
mysql->use 数据库名;
等等,可以查看http://www.cnblogs.com/mr-wid/archive/2013/05/09/3068229.html#c4

Django里配置数据库是在settings.py文件里,对DATABASES的内容进行修改:

2、创建app
如果使用了Django的数据库层(模型),必须创建一个app。
$ python manage.py startapp rasp_test
在主目录里出现了rasp_test目录,该目录中有

3、建立模型
对models.py进行修改:
...
class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    email = models.EmailField()
class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()
相当于创建数据库表。
然后进行模型安装:
①将app添加到INSTALLED_APPS里:
MIDDLEWARE_CLASSES = (
# 'django.middleware.common.CommonMiddleware',
# 'django.contrib.sessions.middleware.SessionMiddleware',
# 'django.contrib.auth.middleware.AuthenticationMiddleware',
)
INSTALLED_APPS = (
# 'django.contrib.auth',
# 'django.contrib.contenttypes',
# 'django.contrib.sessions',
# 'django.contrib.sites',
'项目名.APP名',
)
②验证模型有效性:
python manage.py validate
③运行命令生成MySQL对应指令:
python manage.py sqlall APP名
sqlall 命令并没有在数据库中真正创建数据表,只是把SQL语句段打印出来,这样你可以看到Django究竟会做些什么。
④添加模型到数据库
python manage.py syncdb
syncdb 命令是同步你的模型到数据库的一个简单方法。 它会根据 INSTALLED_APPS 里设置的app来检查数据库, 如果表不存在,它就会创建它。 需要注意的是, syncdb 并不能将模型的修改或删除同步到数据库;如果你修改或删除了一个模型,并想把它提交到数据库,syncdb并不会做出任何处理。

4、基本数据访问
python manage shell
举例如下:
Django在后台执行insert,select等语句与数据库进行交互。
如果想在打印列表时看到一些列表里的内容,可以对列表添加字符串表现
**def __unicode__(self):**
**return self.name**    #或者**return u'%s %s' % (self.first_name, self.last_name)**

二、前面的都不重要!Django与已存在的数据库的结合!
1、使用inspectdb
inspectdb 工具内省检查你的配置文件(setting file)指向的数据库,针对你的每一个表生成一个Django model的表现,然后将这些Python model的代码显示在系统的标准输出里面。在创建好app之后,进行以下操作:
python manage.py inspectdb
将标准shell的输出重定向,保存输出到你的应用的 models.py 文件里:
<span style="font-family:Arial;line-height: 1.5;">python manage.py inspectdb >myapp/models.py</span>
<img src="http://p.qlogo.cn/qqmail_head/PiajxSqBRaEJlW2NDWmOakWjlXK7ZKRY5R6XKOiaQmbxibpdBxhYKqWQUt2BWFy5bRIau8KYQVMGNzdBMhGhOsvG7iarZAH2iaaW4NUKQpgKEvEC27s4FfxXF8Mx29U0vxnRKeumFOj9ciccuaLCT5pAFZtazx123hRCibf/0" modifysize="100%" diffpixels="25px" style="width: 675px; height: 552px;" alt="" />
</pre><pre class="code" name="code" style="white-space: pre-wrap; word-wrap: break-word; line-height: 26px; margin-top: 0px; margin-bottom: 0px;">2、清理生成的models
①删除Django自动添加的id主键字段
②<span style="color: rgb(51, 51, 51); font-family: Arial;">如果inspectdb无法对某个model字段类型根据数据库列类型进行映射,那么它会使用TextField字段进行代替,并且会在所生成model 字段后面加入Python注释“该字段类型是猜的”。</span><span style="color: rgb(51, 51, 51); font-family: Arial;">如果数据库中某个列的名字是Python的保留字,比如pass、class或者for等,inspectdb会在每个属性名后附加上_field,并将db_column属性设置为真实的字段名,比如pass,class或者for等。</span><tt style="color: rgb(51, 51, 51);">inspectdb</tt><span style="color: rgb(51, 51, 51); font-family: Arial;"> 会在该字段后加注 </span><tt style="color: rgb(51, 51, 51);">‘字段重命名,因为它是一个Python保留字’</tt><span style="color: rgb(51, 51, 51); font-family: Arial;"> 。</span>
<span style="font-family:Arial;color:#333333;line-height: 1.5;">③</span><span style="color: rgb(51, 51, 51); font-family: Arial;">如果数据库中某张表引用了其他表(正如大多数数据库系统所做的那样),你需要适当的修改所生成model的顺序,以使得这种引用能够正确映射。 例如,model Book拥有一个针对于model Author的外键,那么后者应该先于前者被定义。</span>
<span style="font-family: Arial;"><span style="color:#ff0000;line-height: 1.5;">遇到的问题:</span></span>
<span style="font-family: Arial;"><span style="color:#ff0000;line-height: 1.5;">①MySQL doesn't allow unique CharFields to have a max_length > 255</span></span>
<span style="font-family: Arial;"><span style="color:#ff0000;line-height: 1.5;">解决方案:去除了ipv6server的webdomain的unique属性。</span></span>
<span style="line-height: 26px; font-family: Arial;"><span style="color:#ff0000;line-height: 1.5;">②输入命令"python manage.py sqlall rasp_test"后提示:</span></span>
<span style="font-family:Arial;color:#ff0000;line-height: 1.5;">CommandError: App 'rasp_test' has migrations. Only the sqlmigrate and sqlflush commands can be used when an app has migrations.</span>
<span style="font-family:Arial;color:#ff0000;line-height: 1.5;">解决方案:这是由于django版本更新产生的错误,最新版的django带有migration功能,需要采用以下命令</span>
<span style="font-family:Arial;color:#ff0000;line-height: 1.5;">python manage.py makemigrations rasp_test</span>
python manage.py sqlmigrate rasp_test 0001

三、Django管理界面
1、创建管理用户
python manage.py syncdb
然后运行runserver命令,即可从115.25.86.4/admin进入管理界面。
2、对模型添加管理界面
在app的admin.py文件中添加
from rasp_test.models import Ipv4Server,Ipv6Server
admin.site.register(Ipv4Server)
admin.site.register(Ipv6Server)
然后打开管理界面即可看到模型列表
0 0
原创粉丝点击