Django用法

2017-06-19

基础用法

首先是下载

建立工程文件,用过scarpy框架的对这个应该不会很陌生

1
django-admin.py startproject my_blog

为了方便查看我们用Django框架建立的my_blog文件,查看它的结构,所有用到tree来查看

1
2
3
brew install tree

tree my_blog

效果如图:

然后创建一个app,这里的app是指的一个功能模块,比如这里建立的app名称为article,负责的功能就是文章。可以有很多功能模块。

创建一个模块的命令是:

1
python manage.py startapp article

注意是在我们已经创建的my_blog目录下进行创建,需要先切换进目录。新建了还不行,还要通知给主文件my_blog,告诉它“我在这呢!”,所有需要在my_blog/my_blog/setting.py下添加新建app,在INSTALLED_APPS中声明。

Django中默认用的数据库是sqlite,这里sqlite数据库里的需要同步一下,每次新添加app,需要同步数据库。命令是:

1
python manage.py migrate


然后就可以成功启动了。启动的命令为:

1
python manage.py runserver localhost:9000

可以打开浏览器查看

接下来就是创建Models的了,Models在我的项目是干什么的,Models在我的项目里是用来决定我的项目中有什么的。Models在article目录下,决定的是这个article中的内容。

在article/models.py编写程序

可以看到代码里有title,有category,有date_time和content等,这些有什么用,我们先看下博客的成品。

这里的article就是title,time就是date_time,models中定义的content,点击文章就会进入详情页,里面就会有文章内容。面所有创建models中的内容的时候,就是创建这些页面中有什么的过程。

从成品来看,文章不止有一篇,而我们models如其名字,定义的是一个模板,但是文章有好几篇,这就有些类似淘宝了,文章就像是每个商品,需要商家来进行上架,我们的上架需要一个后台来进行上架操作,这就是一个后台管理界面,这个后台管理界面在Django中非常方便添加,我们创建项目时已经是默认有了,不信的话,可以去setting中的INSTALLED_APPS查看:

我们可以在浏览器中进入localhost:9000/admin,呈现的是一个登陆页面,账号哪里来呢?


需要我们自己创建:

1
python manage.py createsuperuser

输入邮箱和密码,不要以为是test项目就以为可以随便,密码设置这里也是有严格的要求的。

用账号密码登录,这时候进入后,是这样的管理界面


而我想要的是

我需要把我创建的Article这个app引入进来。如何引入?进入article/admin.py这个文件进行修改,其实从这个文件的名称来看,admin不就是我们管理的主页面的名称,这里的admin不是随便起的名字,每个app的admin文件都和主文件的admin有联系。

第一行与链接数据库有关;第二行和在article中导入models有关;第三行用于在主admin中注册Article。

接下来就是很重点的,处理客户端的访问了,访问某个页面,然后我们返回什么数据。也就是函数定义页面。函数处理的文件为article/views.py,这这里编写逻辑。

如喜闻乐见的Hello World


但是有一点需要说明的是,我们访问localhost:9000,得到的结果是

但是如果访问localhost:9000/ahdifj就会找不到页面,说明有一个地方是负责分配流量的,也就是指定页面的,不同的页面有不同的view文件来定义相应的页面。

这个分流的地方就是my_blog/urls.py


这里用正则表达式进行了匹配,来进行过滤,访问的是/的指定到views去,如果是/admin的就指定到admin的页面。

入门的先写到这,总结一下今天遇到的坑:

不要在一个terminal中进行所有操作,关闭Django,然后在重启,这样容易发生端口已经被占用,我们不用关闭,另外打开一个页面进行vim编辑就好了,编辑完了用:w保存一下,然后会自动进行编译。

查看端口占用情况的命令:lsof -i:端口号

killall+进程名

在admin登录报错的话,可能是没有同步数据库.

之前在article中添加的文章,下面这一步相当于查询sqlite数据库的操作。

不要忘记这里和datetime的import。

利用Django简易的实现一个操作数据库后台

Django为各种数据库提供了非常好的支持,这里拿sqlite作为例子。

1.在项目中新建app

1
django-admin.py startapp cis

2.在项目的settings文件中的INSTALLED_APPS中添加新建的app名称。

3.在settings文件中添加databases配置。

1
2
3
4
5
6
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}

4.在models.py文件中建立数据库的表和字段

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import uuid
from django.db import models

# Create your models here.

class CommonBase(models.Model):
STATUS_CHOICES = (
('DEFAULT', 'DEFAULT'),
('DELETED', 'DELETED'),
)

id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, db_index=True)
created_at = models.DateTimeField(auto_now_add=True, db_index=True)
updated_at = models.DateTimeField(auto_now=True, db_index=True)
status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='DEFAULT')

class Meta:
abstract = True
ordering = ['-updated_at', '-created_at']


class AppProfile(CommonBase):
name = models.CharField(max_length=150, db_index=True)
repo_url = models.URLField()

这里面可以学习的一点就是CommonBase,和AppProfile的继承的用法。
5.数据库初始化和创建管理员
目前使用默认Sqlite作为数据库,使用Django命令工具初始化:

1
python manage.py makemigrations && python manage.py migrate

创建超级管理员:

1
python manage.py createsuperuser

本地debug模式启动Silvanus:

1
python manage.py runserver <port>

6.启动Django进行查看。
其中的Appprofiles就是我们上面代码生成的表。


查看它的添加数据库条目的页面

7.命令行查看sqlite数据。
启动sqlite数据库

1
sqlite3 /Users/mac/Desktop/Soga/db.sqlite3

查看表
查看字段名
启动django的python命令行环境

1
python manage.py shell

调试使用sqlite中的数据