初识Django —Python API接口编程入门
初识Django
—Python API接口编程入门
一、WEB架构的简单介绍
Django是什么?
Django是一个开放源代码的Web应用框架,由Python写成。我们的目标是用Python语言,基于Django框架,利用MVC模型,实现后台方面的针对数据库的API开发。先了解一下互联网的WEB架构,
如上图:
互联网的WEB架构大致分为三层,web层、app层和数据库层。Web层:如apache网站服务器;app层主要是应用业务;DB指后台数据库。随着互联网的高速发展,网站访问量的增长、数据的累积、负载的过高,应用和数据库的设计也面临了更多的挑战。业务的拆分、数据库的切分已不是什么新名词。为了方便日后系统的平滑扩展,我们在系统设计的时候就需要规划好APP业务实现模式。在这里,我们设计的APP也分为前台和后台,前台主要是展现,如界面、FORM等,后台为API接口,用来联系前台界面和数据库的交互,本文只涉及到APP设计中的后台API接口设计和用Python实现的部分。
当然一个项目的开发离不开团队的合作,我们用GitLab来做开发代码的版本管理,关于git的安装和使用本文不以说明。
二、开发环境搭建
1、安装Python2.8
2、安装Django模块
3、Python开发编辑器PyCharm
有了以上环境,我们就可以开工了,数据库可以直接用Sqlite,如果用mysql的话要安装mysqldb模块。
三、模块设计要求
新人报道,先到项目组领个接口开发任务吧。
项目组分配任务:完成XX数据模型的接口设计
涉及到的表有:XX_TAB
涉及到的API接口有:
1、list,获取XX_TAB表数据,传入参数XX_ID,从数据库中列出XX_ID相同的行。
2、add,删除XX_TAB表一行数据,传入PK_ID、XX_ID
3、update,更新XX_TAB表一行数据,传入PK_ID、XX_ID
4、delete,删除XX_TAB表一行数据,传入PK_ID、XX_ID
说白了就是在应用层实现对XX_TAB标的查询和增删改操作,以用于前台APP的调用,前台APP不直接针对数据库做任何操作,由调用API接口来实现对数据库的查询、增删改。这样设计的目的是降低业务模块间的耦合性,提高APP和数据库的灵活性,便于以后业务的升级变更,也是考虑到今后数据库数据量的增长而便于数据库的拆分和平滑扩展。
四、实际开发
1、Django基本格式介绍
前面已经说过,我们是团队开发的,先将同学们在git上已写得代码pull下来,第一次下载代码,我是用git clone的命令复制到本地的,如下:
git clone http://git.xxx.cn/xxxtest/xxx.git
cd xxxtest #cd到项目目录下
python manage.py runserver 127.0.0.1:8000 #启动项目
注意:我是用git下载的代码,不是自己新建的project。如果同学们是新建项目的话,还需按部就班从django-admin.py startproject [project_name]开始。
创建完项目后,Django框架会自动生成一些文件和文件夹,注意settings.py文件,关于数据库设置处,默认如下代码:
DATABASES = { |
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'test', 'USER': 'test', 'PASSWORD': 'test123', 'HOST':'localhost', 'PORT':'3306', } } |
了解了数据库的配置,我们还需要了解一下项目目录下的主要几个文件:
manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
[PROJECT_NAME]/__init__.py: 一个空文件,告诉 Python 该目录是一个 Python 包。
[PROJECT_NAME]/settings.py: 该 Django 项目的设置/配置。
[PROJECT_NAME]/urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。
[PROJECT_NAME]/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。
2、新建app和表定义
我们现在已经有了项目,我要做的是某个表的api接口,于是我在项目下新建了一个app,新建app用以下命令:
这样我们就新建了一个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
项目rul、app rul和app view之间的调用关系,如下图:
# 几个测试接口 router = routers.DefaultRouter() urlpatterns = [url('^hello/$', hello), url('^simple/$', Simple.as_view()), url( r'/log/', include(xx_tab.urls')), ] |
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), ] |
http://127.0.0.1/xx_tab/list/?xx_id=1
4、用Django生成数据库中的表
完成了在Django框架models.py文件中定义了xx_tab表的相关信息,我们就可以用django命令来生成表。
python manage.py makemigrations xx_tab
执行python manage.py migrate xx_tab,在数据库中生成xx_tab表。
d:\dt\sqlite\sqlite3.exe db.sqlite3 打开当前的数据库,sqlite3.exe可在网上下载。
5、API接口,实现ADD单行数据
我们要模拟从前台发出一个get或post请求,调用要写的api接口实现插入数据库的功能,
上面是一个插入演示页面,post相关表字段值,完成对数据库的一行数据插入。
View.py主要是接收前台post过来的数据,并在完成处理、存储后返回相关信息。
# -*- coding: utf-8 -*-
from rest_framework import statusfrom rest_framework.decorators import api_viewfrom rest_framework.response import Response
因为在urls.py中我们定义的是url(r'add/$', 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过来的数据我们怎么处理。
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 |
首先要判断get或post过来的数据是否满足我们的要求,例如缺少字段、类型错误等。
主要是对上面dict的处理,主要都是python语句实现,不涉及Django,此处省略。
例如雇员表,add一行需要有以下信息,先定义一个list,用来和传入数据作对比即可
emp = ["empno:int","ename:str","job:str","mgr:int","hiredate:str","sal:int",
转载于:https://www.cnblogs.com/dtstack/p/9668479.html
初识Django —Python API接口编程入门相关推荐
- MAYA API插件编程--入门篇
MAYA API插件编程--入门篇 作者:华文广 日期:2010.11.28 我们知道,MAYA是一个基于结点的插件式软件架构,这种开放式的软件架构是非常优秀的,它可以让用户非常方便 ...
- python 嵌入式数据库_Pysqlite下载 Pysqlite for Windows v2.6.3(嵌入式数据库python api 接口) 下载-脚本之家...
Pysqlite是针对Windows用户设计的一款Python API接口,安装之后就可以进行数据库的连接.创建和管理,可以将sqlit的操作变得简单起来,详细的操作方法参见下文,需要的朋友赶快下载吧 ...
- python机器人视觉编程——入门篇(下)
目录 1 全篇概要 2 图像的读取与运算基础 2.1图像的读取 2.1.1 从磁盘的图像(.jpg,.npg,.gif等等)读取 2.1.2 从摄像头里读取图像 2.2图像的运算 2.2.1 图像的数 ...
- python可视化窗口编程-Python可视化界面编程入门
Python可视化界面编程入门具体实现代码如所示: (1)普通可视化界面编程代码入门: import sys from PyQt5.QtWidgets import QWidget,QApplicat ...
- 国内第一本micropython的书出版《机器人Python极客编程入门与实战》
第一本micropython的书<机器人Python极客编程入门与实战>. 购买地址:https://item.taobao.com/item.htm?spm=2013.1.w4018-1 ...
- 机器人 python 极客入门_机器人Python极客编程入门与实战
Python是一种面向对象.解释型的计算机程序设计语言,其简洁实用.高效,拥有众多模块库,可移植,跨平台,简单易学,易于上手.随着计算机深入发展,Python逐渐成为最适合青少年做创意设计的语言,也同 ...
- 机器人python极客pdf_机器人Python极客编程入门与实战
编辑推荐 有了先进的软件.硬件开发平台,剩下的只是创意.中国人,特别是中国的年轻人,是全球富有创业.创新精神的一群人,这样的一个群体难道还会缺乏创意吗? "青少年学编程系列丛书"只 ...
- arduino nano 蓝牙_掌控板IO接口编程入门 | 用Arduino玩转掌控板(ESP32)系列
众所周知,掌控板在创客教育中用的非常广泛,它是一块基于 ESP32 的学习开发板.大家对掌控板编程,用的比较多的都是图形化编程的方式,比如 mPython.Mind+ 等.但是,既然掌控板是基于 ES ...
- ESP32与掌控板IO接口编程入门 | ESP32轻松学(Arduino版)
众所周知,掌控板在创客教育中用的非常广泛,它是一块基于 ESP32 的学习开发板.大家对掌控板编程,用的比较多的都是图形化编程的方式,比如 mPython.Mind+ 等.但是,既然掌控板是基于 ES ...
最新文章
- linux平台下rpm方式和源码包方式安装mysql5.7
- asp.net代码中修改web.config节点
- Shiro+springboot+mybatis(md5+salt+散列)认证与授权-02
- boost::posix_time模块实现本地时间和 UTC 之间的转换的测试程序
- redis——实战点赞
- 复旦提出LReasoner: 用于文本逻辑推理的逻辑驱动上下文扩展和数据增强方法
- 移动端mintUI mt-datetime-picker 组件使用详解
- Mysql集群方案简介
- 计算机的有关英语单词大全,与计算机相关的英语词汇汇总
- Android Toast的立即取消与显示
- RK3399外设驱动之RTC驱动(一)
- TDR 及其测试原理
- 001-http-总览、文件配置、常用http client、http连接池
- [转] 汉语骂人最高境界!(爆笑)
- 使用客户端jedis时报错Could not get a resource from the pool 以及使用Spring Data Redis报错解决方法
- Windows下的systeminfo命令获取系统信息
- 解决linux上耳机没有声音
- L2-018. 多项式A除以B
- 仿美团(1)--接口分析
- com.android.kyj.onj,Android 自学之列表选择框Spinner