Django教程03 模型(model)
来源:互联网 发布:用什么软件看禁播电影 编辑:程序博客网 时间:2024/05/01 23:38
晓林网 自建博客学习问题及解决办法 红字
数据库设置
做网站就不能离开数据库,除非你是做静态网站。django中可以很方便的跟数据库打交道。
我们常见的数据库有mysql, oracle, postgresql, django自带的sqllite , 还有NOSQL类型的mongodb,在这里我们使用的是mysql
安装mysql
sudo easy_isntall mysql
安装完成后,在终端中输入命令登陆mysql:
mysql
-
u root
-
p
然后输入你安装mysql时候设置的密码,如果没有设置,直接回车就好了
我们需要为工程创建一个数据库, 数据库名字就叫blog好了:
mysql> create database blog default charset
=
utf8;
设置默认字符集为utf8,以便支持中文。不要忘了在命令最后加个分号,不然命令是无效的。
打开myblog/settings.py 文件,修改DATABASE项:
DATABASES
=
{
'default'
: {
'ENGINE'
:
'django.db.backends.mysql'
,
'NAME'
:
'blog'
,
'USER'
:
'root'
,
'PASSWORD'
: '',
'HOST'
:
'localhost'
,
'PORT'
:
'3306'
,
}
}
这样就能让django支持mysql,之后django就能直接操作数据库了。
顺便把settings.py文件下面的 TIME_ZONE='UTC' 改为 TIME_ZONE = 'Asia/Shanghai' 这是修改时区,为了让系统时间跟当前中国的时间绑定。
Django Model
在mysql中创建表等需要写sql语句,但在django不需要,一切都已经封装好了。数据库中的表是跟django中的类对应的,表的字段就对应着类的属性
比如我们需要这么一张表,表名:Person, 字段有name , age等 ,如果用sql语句创建需要这么写:
CREATE TABLE Person
(
name varchar(
50
),
age
int
)
而在django中,我们需要创建python类来实现
打开blog/Model.py 文件, 创建Person类
from
django.db
import
models
class
Person(models.Model):
name
=
models.CharField(
'姓名'
, max_length
=
50
)
age
=
models.IntegerField(
'年龄'
, blank
=
True
)
def
__unicode__(
self
):
return
self
.name
可以看到,我们创建了2个属性,也就是数据库表中的2个字段 name 的中文标识是 '姓名',最大长度是50个字符。第二个字段的 blank=True是表示这个字段可以为空
每个类都继承自model.Model.注意__unicode__ ,这个的是用来说明对象Person的表达式,告诉django用这个字段来表达自己。这个是在后台管理中的显示用的,在后面的教程中会讲到
以上是举得例子,那我们这个blog如何建表呢:
# -*- coding: utf-8 -*-
from
django.db
import
models
# Create your models here.
class
Tag(models.Model):
tag_name
=
models.CharField(
'标签'
, max_length
=
50
)
tag_cn_name
=
models.CharField(
'中文名字'
, max_length
=
50
, blank
=
True
)
def
__unicode__(
self
):
return
self
.tag_name
class
Article(models.Model):
title
=
models.CharField(
'标题'
, max_length
=
100
)
tag
=
models.ManyToManyField(Tag, max_length
=
50
, blank
=
True
)
date_time
=
models.DateTimeField(
'日期'
, auto_now_add
=
True
)
content
=
models.TextField(
'内容'
, blank
=
True
, null
=
True
)
def
__unicode__(
self
):
return
self
.title
class
Meta:
verbose_name
=
'文章'
verbose_name_plural
=
'文章'
ordering
=
[
'-date_time'
]
verbose_name 属性也是为了在后台管理中显示用的, ordering是排序用的,['-date_time']就表示按时间倒序
ManyToManyField 是表示这是一个多对多的字段。对应的是Tag表
问题1: Error loading MySQLdb module: No module named MySQLdb
解决办法:
sudo apt-get install python-MySQLdb
问题2:SyntaxError: Non-ASCII character '\xe6' in file /home/jhy/myblog/blog/models.py on line 7, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
解决办法:from __future__ import unicode_literals
# encoding: utf-8 添加这句
from django.db import models
同步数据库
blog应用的所有类都已经写好了,怎么让mysql开始创建表呢。
打开终端,首先输入:
python manage.py makemigrations
输出:
Migrations
for
'blog'
:
0001_initial
.py:
-
Create model Article
-
Create model Tag
-
Add field tag to article
再输入命令:
python manage.py migrate
输出:
perations to perform:
Synchronize unmigrated apps: staticfiles, blog, messages
Apply
all
migrations: admin, contenttypes, auth, sessions
Synchronizing apps without migrations:
Creating tables...
Creating table blog_tag
Creating table blog_article
Running deferred SQL...
Installing custom SQL...
Running migrations:
Rendering model states... DONE
Applying contenttypes.
0001_initial
... OK
Applying auth.
0001_initial
... OK
Applying admin.
0001_initial
... 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 sessions.
0001_initial
... OK
表创建完后,系统会接着提示你是否要创建超级用户,这个用户是为了登陆后台管理用的,你可以自己输入一个超级用户的账号,密码你可以自己输入,然后再随便输入一个邮箱地址就行了。如果在这个步骤你忘了创建,也可以通过命令单独创建超级用户:
^CbxldeMac:myblog bxl$ python manage.py createsuperuser
Username (leave blank to use
'bxl'
): admin
Email address: admin@
123.com
Password:
Password (again):
Superuser created successfully.
注意Password后面是空的,因为在linux系统下输入密码是看不到的
在blog/admin.py中注册这两个表,如果不注册,在后台管理页面中是看不到这2个表的:
from
django.contrib
import
admin
from
blog.models
import
Tag, Article
# Register your models here.
admin.site.register(Tag)
admin.site.register(Article)
代码部分就做完了,在浏览器中输入 127.0.0.1:8000/admin ,会出现登录界面:
输入你刚才创建的账号和密码后如果出现下面的界面,就表示你的表创建成功了:
也可登录mysql中查看表是否创建成功,打开终端,输入:
mysql
-
u root
-
p
使用数据库blog:
mysql> use blog;
Database changed
查看数据库中所有的表
mysql> show tables;
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
| Tables_in_blog1 |
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| blog_article |
| blog_article_tag |
| blog_tag |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
13
rows
in
set
(
0.00
sec)
可以看到,两个表Tag, Article已经创建成功了.
系统会自动在表名前面加数据库的名字blog,合起来作为表名。
Django Shell
我们可以直接通过django的交互方式来对数据库进行操作,输入:
python manage.py shell
Python
2.7
.
5
(default, Mar
9
2014
,
22
:
15
:
05
)
[GCC
4.2
.
1
Compatible Apple LLVM
5.0
(clang
-
500.0
.
68
)] on darwin
Type
"help"
,
"copyright"
,
"credits"
or
"license"
for
more information.
(InteractiveConsole)
>>>
跟python的交互方式很像
>>>
from
blog.models
import
Tag
>>> Tag.objects.
all
()
#查找Tag表中所有的数据
[<Tag: News>, <Tag: Tech>]
>>> first
=
Tag.objects.get(
id
=
1
)
#查找Tag表中id=1的数据
>>> first.tag_name
#显示这条数据的tag_name信息
u
'News'
>>> first.tag_cn_name
#显示这条数据的tag_cn_name信息
u
'\u65b0\u95fb'
>>> Tag.objects.create(tag_name
=
'python'
, tag_cn_name
=
'python'
)
#插入一笔数据
<Tag: Tag
object
>
当然,你也可以在mysql的操作台下通过sql语句来操作
打开终端,
- Django教程03 模型(model)
- Django模型model
- Django Model.py数据库模型
- Django文档翻译:模型参考(Model Reference)
- Django文档翻译:模型参考(Model Reference)
- django学习之三:model模型创建
- Django模型(model)详细介绍1
- django 模型model与数据库1
- django系列5:模型(model)
- Django学习06---Model模型(数据库)
- Django笔记教程:三、Model进阶
- Django 模型字段类型总结 (Django Model field types summary)
- 3.Django入门:教程-模型
- Django教程之十一-----模型
- Django学习07---model模型以及关系模型
- starling教程-事件模型(Event model )
- Django model
- Django model
- IDEA15引用mvn-install到repository的其他项目出现的奇怪问题
- iOS 探讨之 "Developer Tools Access 需要控制另一个进..."
- 说说条件编译#ifndef,#define,#endif
- C++编程基础笔记章节四
- MISRA-C 2004 规则解读(81S-100S)
- Django教程03 模型(model)
- Btrace详解
- 收藏本站——添加到浏览器收藏夹
- 高德地图显示在fragment中并添加按钮点击事件
- MISRA-C 2004 规则解读(101S-120S)
- Stanford ex6:Support Vector Machines
- 桶排序
- 【EJB系列】(三)——JMS和MDB
- Linux服务器配置PHP环境