Django 与 Django Rest Framework —— 配置,部署与使用

由于业务上的原因,刚好需要使用 Django, 但过程比较复杂(毕竟我好几年没有编程了!)。为了好好整理一下思路,我专门写了这篇文章。

安装

自带的源速度是捉急的,只能换清华源。
按照这里去设置。

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

安装 Django:

pip install django

安装 Django REST Framework (这个是用来整 API 的,Django 只是一个网页框架):

pip install djangorestframework

如果要接盘的项目有 requirements.txt, 可用如下命令一次性安装:

pip install -Ur ./requirements.txt

如果想方便别人接盘,可以用这个命令生成 requirements.txt:

pip freeze > ./requirements.txt

如果不得不用 32 位 Windows 系统开发,而无法安装只有 64 位的 GitHub Desktop, 可以使用 Git Extension 这个 Git 客户端。以上命令主要是在 Git Bash 里执行的——因为 cmd 不支持 ./ !

开工

创建项目:

django-admin.py startproject <你爱叫啥名称就输入啥名称>

迁移:

./manage.py makemigrations
./manage.py migrate --run-syncdb

这两个命令在修改了 models.py 的内容之后需要执行一次。很多疑难杂症的解决方法就是执行这两行。如果执行了还是出错,删了 db.sqlite3 吧!删库总能解决的!(当然删库会造成什么后果,请自行衡量)删库论据在此。

试运行(不整也行):

./manage.py runserver localhost:8888

后面的地址不建议省去。另外,这届服务器不是用 Ctrl-C 退出的,是用 Ctrl-Break 退出的。那个 Break 键一般长这样:一行写着 Pause, 一行写着 Break 的。

写点代码

Django 有这两个概念,那就是项目和应用的概念。项目在上面已经创建了,但是应用这一概念我还没懂。这里说的应用是什么类似私信组件云云,实际操作中,我一开始是真的如他所说的,新建了一个组件——一个表示链接的组件。也许是代表的层级过低,没有卵用,后来我整个项目删了,新建了一个叫 api 的应用。

新建应用:

./manage.py startapp api

配置 REST Framework 和应用:

主项目里有个叫 settings.py 的文件,打开它,往 INSTALLED_APPS 里加一行 ‘rest_framework’ 和 ‘api’ 就成了!这个你新建的 api 之所以要添加,是因为——让 Django 知道有这么一个玩意!

讲一下刚新建的应用文件夹里有啥

其实我也没懂什么叫 MVC 开发模式,参考了这里的说法,我只知道:

  • models.py 这个是用来描述数据的,说明要存进数据库里的是个什么东西
  • serializers.py 这个是拿来给 JSON 和数据库对接的!当浏览器 GET 或者 POST 的时候,总得把 models.py 里定义的东西转成 JSON 给前端去搞吧!
  • views.py 文档说是处理业务逻辑的,我也不懂啥叫业务逻辑,我只知道它能够接受 Web 请求和返回 Web 响应。
  • urls.py 一个对接 Web 请求和业务逻辑的部分。

这个过程就是:

上网冲浪,发送请求 -> urls.py -> views.py -> serializers.py -> models.py

models.py

对着这里的第三部分照猫画虎就可以了。只要继承了 Model 类,类内部赋值为 *Field 的,会成为数据的结构的。

serializers.py

对着上面给的链接写。
注意 class Meta 里的 model 需要赋值为在 models.py 里写好的类。而 fields 除了第一个元素之外,其余项目需要与 models.py 里写的一样——变量名称一字不漏对上了,才能对接!

例如:

serializers.py:
class LinkEntrySerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = LinkEntry
        fields = ('url', 'link', 'public_date')

models.py:
class LinkEntry(models.Model):
    link = models.URLField(max_length=2550, blank=False)
    public_date = models.DateTimeField('date published')

# link, public_date 两个是对上了的。

views.py

还是对着写。
queryset 要对应 models.py 里写的类。serializer_class 则要对应 serializers.py 里写的。这两项是必须有的。

urls.py

时代变了。现在这年头流行用 Router 了。
这里操作吧。
当然新建的时候应该帮你生成了,照猫画虎就可以了。这里讲一下 router.register 的用法。

router.register(<网址尾缀>, <views.py 里定义的类>)

这个网址尾缀呢,就是 https://网址.com/suika 里的 /suika 部分。

一些疑难杂症

OperationalError No Such Table:

这里操作,--run-syncdb 就好了。不行就删库!

Rest Framework 与 taggit 的联动

使用 django-taggit-serializer 项目。Taggit 插件本身只针对 Django 设计,只能用这个插件来兼容 Rest Framework.

没了?

我觉得没了。搞这四个文件基本上就完事了。有新问题我会补充的。

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s