CRUD Demo Based on Django RESTful and IntelliJ IDEA

记录一下django restful配合IDEA插件的安装和测试步骤,目录如下,

0. Overview
1. Version
2. QuickStart
   - 在项目顶层新建模块
   - 设置新模块,勾选Django,填入app名
   - 自动生成代码
   - 编辑MVC
   - 使MVC改动作用到数据库文件
3. Tests
   - create
   - retrieve
   - update
   - destroy
4. Others
5. RESTful
6. RESTful Multiple Resources
7. APIDOC
8. Reference

Overview

最近要升级API,由之前的堆砌方法升级到RESTful(每个URL代表一种资源),使用内置的CRUD route来定位资源并操作她。

下面看看结合IDEA的Django plugin如何new一个新demo。


Version

CRUD Demo Based on Django RESTful and IntelliJ IDEA_第1张图片
version

QuickStart

  1. 在项目顶层新建模块
CRUD Demo Based on Django RESTful and IntelliJ IDEA_第2张图片
new module
  1. 设置新模块,勾选Django,填入app名
CRUD Demo Based on Django RESTful and IntelliJ IDEA_第3张图片
set module

名字由demo改为rdemo

  1. 自动生成代码
    这里一开始顶层文件夹名字是restful-crud,由于带-导致代码不能自动生成,所以最后改为restfulcrud
CRUD Demo Based on Django RESTful and IntelliJ IDEA_第4张图片
Django Autogen
  1. 编辑MVC

    • 修改表结构的models.py
    • 修改实现逻辑的views.py
    • 修改路由逻辑的urls.py
  2. 使MVC改动作用到数据库文件

    • cd rdemo/
    • python manage.py makemigrations (产生migrations文件,如下,但是并未作用到数据库文件)
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import migrations, models
import django.core.validators


class Migration(migrations.Migration):

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Person',
            fields=[
                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                ('created_by', models.CharField(default=b'', max_length=128)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_by', models.CharField(default=b'', max_length=128)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('description', models.TextField(default=b'')),
                ('name', models.CharField(max_length=20)),
                ('phone', models.CharField(max_length=11, verbose_name=b'phone Number', validators=[django.core.validators.MinLengthValidator(11)])),
                ('age', models.IntegerField()),
                ('address', models.TextField()),
            ],
            options={
                'db_table': 'person',
            },
        ),
        migrations.AlterUniqueTogether(
            name='person',
            unique_together=set([('name', 'phone')]),
        ),
    ]

  • python manage.py migrate (将改动作用到数据库文件,比如产生table之类)
  • python manage.py runserver localhost:8000
CRUD Demo Based on Django RESTful and IntelliJ IDEA_第5张图片
出现异常

是由于Django settings里面没有引入rest_framework,而该项目这里的MVC的时候却引用了,所以这里加上。

CRUD Demo Based on Django RESTful and IntelliJ IDEA_第6张图片
add rest_framework to INSTALLED_APPS
CRUD Demo Based on Django RESTful and IntelliJ IDEA_第7张图片
call succeed
CRUD Demo Based on Django RESTful and IntelliJ IDEA_第8张图片
Final Django Autogen

Tests

在这里运行一些测试URL,以验证CRUD。


Others

这里并不符合RESTful的:instance_id的方式,因为这里将CRUD的方法都用了list_route转换了,变成C1R1U1D1,为了更好识别吧。


RESTFUL

下面增加符合RESTful风格的另一个viewset,personrest,结果如下,

使用的是DefaultRouter,其中自动生成了CRUD方法,要注意最左侧的URL Style,以及view方法里面的具体实现,要一一对应,不然就是404或者500。

CRUD Demo Based on Django RESTful and IntelliJ IDEA_第9张图片
DefaultRouter
  • with instance_id, (CREATE)
  • without instance_id, (RETRIEVE, UPDATE, DESTROY)
CRUD Demo Based on Django RESTful and IntelliJ IDEA_第10张图片
personrest-create
CRUD Demo Based on Django RESTful and IntelliJ IDEA_第11张图片
personrest-retrieve
CRUD Demo Based on Django RESTful and IntelliJ IDEA_第12张图片
personrest-update
CRUD Demo Based on Django RESTful and IntelliJ IDEA_第13张图片
personrest-retrieve2
CRUD Demo Based on Django RESTful and IntelliJ IDEA_第14张图片
personrest-destroy
CRUD Demo Based on Django RESTful and IntelliJ IDEA_第15张图片
personrest-retrieve3

URL的instance_id要拼凑,不可以缺失。


RESTful Multiple Resources

在model(表)是多个field组成一个unique key的时候,需要用到多级资源来定位。比如说定位一个人Person,需要name,phone,age(当然这里其实phone就能唯一确定一个人,但是为了说明样例,这里假设了三个field才能唯一定位某人),单单一个name是不足的。

设计如下,先找到一级资源name,然后在一级资源下的二级资源找phone,然后在二级资源下的三级资源找age,从而找到某人,再对某人进行操作。

CRUD Demo Based on Django RESTful and IntelliJ IDEA_第16张图片
personrest-create
CRUD Demo Based on Django RESTful and IntelliJ IDEA_第17张图片
personrest-retrieve
CRUD Demo Based on Django RESTful and IntelliJ IDEA_第18张图片
personrest-update
CRUD Demo Based on Django RESTful and IntelliJ IDEA_第19张图片
personrest-retrieve2
CRUD Demo Based on Django RESTful and IntelliJ IDEA_第20张图片
personrest-destroy
CRUD Demo Based on Django RESTful and IntelliJ IDEA_第21张图片
personrest-retrieve3

APIDOC

通过在每一个RESTful CRUD方法下面加上注释,然后通过apidocjs来生成index.html等静态文件,用于生成网页,如下,

CRUD Demo Based on Django RESTful and IntelliJ IDEA_第22张图片
apidoc

Reference

  • Django REST framework
  • APIDOC Inline Documentation for RESTful web APIs
  • source code

你可能感兴趣的:(CRUD Demo Based on Django RESTful and IntelliJ IDEA)