这样我们就新建了一个xx_tab命名的app,我们要做一些修改:
1、还是打开settings.py文件,找到INSTALLED_APPS参数,在最后面加入xx_tab的app名,如下: INSTALLED_APPS = ['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework_swagger',
'rest_framework',
'rest_framework_jwt',
'xx_tab’,
]
2、修改xx_tab目录下得而models.py文件,定义我们需要建的表
# Create your models here.class Xx_Tab(models.Model):
pk_id = models.AutoField(primary_key=True)
xx_id = models.IntegerField()
xx_name = models.CharField(max_length=200)
3、修改url
完成数据库表的定义后,考虑到使用http来访问数据库的,那就离不开http的url地址。前面在文件介绍中说过用django-admin.py startproject [project_name]命令生成项目后,在项目层目录下会有url的python文件,在每个项目下用django-admin startapp xx_tab命令生成的app中也会有url的python文件,url好比是网站网页的目录,是用来在web界面上访问的地址。一般,url会对于view,view好比是网页,url指向view。
项目rul、app rul和app view之间的调用关系,如下图:
Project rul格式:
# 几个测试接口 router = routers.DefaultRouter() urlpatterns = [url('^hello/$', hello),
url('^simple/$', Simple.as_view()), url( r'/log/', include(xx_tab.urls')), ]
App rul格式
urlpatterns = [url(r'list/$', views.get_xx_tabs,),
url(r'detail/([0-9]+)$', views.get_xx_tab),
url(r'delete/([0-9]+)$', views.delete_xx_tab),
url(r'update/([0-9]+)$', views.update_xx_tab),
url(r'add/$', views.add_xx_tab),
]
以上是两层url调用举例:
url在浏览器中的完整写法应该如下:
?xx_id=1
4、用Django生成数据库中的表完成了在Django框架models.py文件中定义了xx_tab表的相关信息,我们就可以用django命令来生成表。
python manage.py makemigrations xx_tab
注意:xx_tab是app名,此命令会在xx_tab app下migrations目录下生成一个0001_initial.py文件,此文件定义了建表信息,如果发现表定义有问题,在修改models.py中的定义后,需要删除0001_initial.py文件,重跑python manage.py makemigrations xx_tab,重新生成0001_initial.py。
执行python manage.py migrate xx_tab,在数据库中生成xx_tab表。
打开Sqlite数据库,在windows下可用
d:\dt\sqlite\sqlite3.exe db.sqlite3 打开当前的数据库,sqlite3.exe可在网上下载。
.table可查看当前的表。
.schema tab_name 可查看表结构定义。
5、API接口,实现ADD单行数据我们要模拟从前台发出一个get或post请求,调用要写的api接口实现插入数据库的功能,
如下界面,模拟前台调用
上面是一个插入演示页面,post相关表字段值,完成对数据库的一行数据插入。
完成这已插入过程的逻辑关系如下:
View.py主要是接收前台post过来的数据,并在完成处理、存储后返回相关信息。
Service.py主要处理数据,格式化数据
数据库接口层主要处理对数据库的数据存储和访问。
view.py
开头,以下这几行是必不可少的
# -*- coding: utf-8 -*- from rest_framework import statusfrom rest_framework.decorators import api_view
from rest_framework.response import Response
因为在urls.py中我们定义的是url(r'add/$', views.add_xx_tab)
add指向views.add_xx_tab
所以我们在views中需要定义add_xx_tab函数
@api_view(['POST', 'GET'])
def xx_tab_add(request, *args): #1、接收request数据 #2、处理数据
#3、返回结果
基于django rest_framework,在处理client http request时需要用到@api_view修饰。
同时,我们也需要弄清楚对于从client端GET或POST过来的数据我们怎么处理。
#1、接收request数据
if request.method == 'GET':
do_something()
elif request.method == 'POST':
do_something_else()
如果是GET,需要处理request .query_params;如果是post需要处理request .data
if request.method == 'GET':
for k in request .query_params:
dict[k] = request .query_params[k]
return dict
elif request.method == 'POST':
for k in request.data
dict[k] = request .data [k]
return dict
#2、处理数据
首先要判断get或post过来的数据是否满足我们的要求,例如缺少字段、类型错误等。
如果数据没有问题,再存入数据库。
主要是对上面dict的处理,主要都是python语句实现,不涉及Django,此处省略。
逻辑过程:
1、判断传入的request是否缺少相应的字段
2、判断传入的request是否有类型错误
方法:
例如雇员表,add一行需要有以下信息,先定义一个list,用来和传入数据作对比即可
emp = ["empno:int","ename:str","job:str","mgr:int","hiredate:str","sal:int",
"comm:int","deptno:int"]
如果
#3、返回结果
直接返回插入成功即可。