django,flask接口初试
-------------django 1、需要安装的环境
pip install django
pip install djangorestframework ## restful组件
pip install markdown ## 将文本渲染成html
pip install django-filter ## 查询插件
2、创建项目
## django-admin startproject api
## cd api
## python manage.py startapp app
3、配置settings.py文件
## INSTALLED_APPS
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_api.apps.DjangoApiConfig',
'app', ##引入app
'rest_framework' ## 引restful组件
]
## 配置数据库 mysql
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'api',
'USER': 'root',
'PASSWORD': 'root',
'HOST': '127.0.0.1'
}
}
4、建表models.py /app/models.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals # Create your models here.
from django.db import models
class Type(models.Model):
'''type'''
###设置名称,去除前缀
class Meta:
db_table = "type"
type_name = models.CharField(max_length=50)
pub_date = models.DateField()
def __str__(self):
return '%s' % self.type_name class Autor(models.Model):
'''作者'''
GENDER_CHOICES = (
(u'M', u'Male'),
(u'F', u'Female'),
)
class Meta:
db_table = "autor"
name = models.CharField(max_length=100)
gender = models.CharField(max_length=2, choices=GENDER_CHOICES, default='M')
def __str__(self):
return '%s' % self.name class Book(models.Model):
'''book'''
class Meta:
db_table = "book"
type = models.ForeignKey(Type)
name = models.CharField(max_length=200)
description = models.TextField()
autor = models.ForeignKey(Autor)
src = models.CharField(max_length=200)
pub_date =models.DateField()
def __str__(self):
return '%s' % self.name class Music(models.Model):
'''music'''
class Meta:
db_table = 'music'
type = models.ForeignKey(Type)
name =models.CharField(max_length=200)
src = models.CharField(max_length=200)
pub_date = models.DateField()
def __str__(self):
return '%s' % self.name
建立了四张表type,autor,book,music
5、新建序列化文件serializer.py /app/serializer.py from app.models import Type,Autor,Book,Music
from rest_framework import serializers class TypeSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Type
fields = ('type_name', 'pub_date') class BookSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Book
fields = ('type','name','description','autor','src','pub_date') class MusicSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Music
fields = ('type','name','src','pub_date')
class AutorSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Autor
fields = ('name','gender')
6、修改视图文件views.py /app/views.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals from django.contrib.auth.models import User, Group
from app.models import Type,Book,Autor,Music
from rest_framework import viewsets
from app.serializers import TypeSerializer,BookSerializer,MusicSerializer,AutorSerializer class TypeViewSet(viewsets.ModelViewSet):
queryset = Type.objects.all()
serializer_class = TypeSerializer class AutorViewSet(viewsets.ModelViewSet):
queryset = Autor.objects.all()
serializer_class = AutorSerializer class BookViewSet(viewsets.ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer class MusicViewSet(viewsets.ModelViewSet):
queryset = Music.objects.all()
serializer_class = MusicSerializer
7、生成路由
a、 urls.py /api/urls.py
from django.conf.urls import url,include
from django.contrib import admin
from app import rest_urls
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^api/', include(rest_urls)),
]
b.在app下新建rest_urls.py /app/rest_urls.py
# -*- coding:utf-8 -*-
from django.conf.urls import url, include
from rest_framework import routers
from app import views router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)
router.register(r'types', views.TypeViewSet)
router.register(r'autors', views.AutorViewSet)
router.register(r'books', views.BookViewSet)
router.register(r'musics', views.MusicViewSet)
urlpatterns = [
url(r'^', include(router.urls)),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]\
8、运行python manage.py runserver

以types为例
http://127.0.0.1:8000/api/types/ 显示type表所有数据
post http://127.0.0.1:8000/api/types/ 为type表新增数据
http://127.0.0.1:8000/api/types/1/ 显示type表id=1的数据
put http://127.0.0.1:8000/api/types/1/ 更新type表id=1的字段数据
delete http://127.0.0.1:8000/api/types/1/ 删除type表id=1的数据
-------------flask
1、安装flask和搭建web环境
pip install flask
。。。
以前的博客已经写过了。
2、创建项目 3、创建模型 modles.py
# -*- coding: utf-8 -*-
from app import db ## 类型表
class Type(db.Model):
__tablename__ = 'type'
id = db.Column(db.Integer, primary_key=True)
type_name = db.Column(db.String(50))
pub_date = db.Column(db.Date)
def __repr__(self):
return '<Type %r>' % self.type_name
def get_info(self):
obj = db.session.execute('select * from type').fetchall()
return obj
## autor
class Autor(db.Model):
M = 'm'
F = 'F'
__tablename__ = 'autor'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100))
gender = db.Column(db.String, default= M)
src = db.Column(db.String(200))
pub_date = db.Column(db.Date)
class Book(db.Model):
__tablename__ = 'book'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(200))
description = db.Column(db.Text)
type_id = db.Column(db.Integer,db.ForeignKey('type.id'))
autor_id = db.Column(db.Integer, db.ForeignKey('autor.id'))
src = db.Column(db.String(200))
pub_date = db.Column(db.Date)
class Music(db.Model):
__tablename__ = 'music'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(200))
type_id = db.Column(db.Integer,db.ForeignKey('type.id'))
src = db.Column(db.String(200))
pub_date = db.Column(db.Date)
4、序列化文件serializers.py
# -*- coding: utf-8 -*-
from marshmallow import Schema, fields ###admin表
class TypeSchema(Schema):
id = fields.Int()
type_name = fields.Str()
pub_date = fields.Str()
5、视图文件 main/views.py
# -*- coding: utf-8 -*-
from flask import jsonify,abort,request,redirect
from .. import db
from ..models import Type
from . import main
from ..serializers import TypeSchema
import datetime
###定义login表单 @main.route('/api/v1.0/types/', methods=['GET','POST'])
def get_types():
if request.method=='GET':
types = Type.query.all()
## -----way 1
# list = []
# dict = {}
# for v in types:
# a = {
# 'id': v.id,
# 'type_name': v.type_name,
# 'pub_date': v.pub_date
# }
# list.append(a)
# dict['types'] = list
# return jsonify(dict) ## way 2
schema = TypeSchema(many = True)
list = schema.dump(types)
return jsonify(list)
else:
if request.values.get('pub_date'):
pub_date = request.values.get('pub_date')
else:
pub_date =datetime.date() if request.values.get('type_name'):
type_name = request.values.get('type_name')
else:
type_name =''
type = Type(type_name = type_name,pub_date = pub_date)
db.session.add(type)
db.session.commit()
redirect('/api/v1.0/types/')
@main.route('/api/v1.0/types/<int:id>', methods=['GET','PUT','DELETE'])
def get_type(id):
if request.method =='GET':
type = Type.query.filter_by(id=id).first()
if type == '':
abort(404)
schema = TypeSchema()
type = schema.dump(type)
return jsonify({'type': type})
elif request.method =='PUT':
try:
id = request.values.get('id')
except:
abort(404)
if request.values.get('type_name'):
type_name = request.values.get('type_name')
else:
pass
if request.values.get('pub_date'):
pub_date = request.values.get('pub_date')
else:
pass
else:
## 删除
pass
----基本是这样,flask-restful这个库还没有使用过,可以尝试下。
----资料来源于网络,flask官方文档。
django,flask接口初试的更多相关文章
- Django&Flask区别
Flask Flask 本身只有一个内核,几乎所有的功能都需要用第三方的扩展来实现. Flask 没有默认使用的数据库,默认依赖两个外部库:Jinja2 模板引擎和 WSGI 工具箱(采用的时 Wer ...
- 在 Django/Flask 开发服务器上使用 HTTPS
使用 Django 或 Flask 这种框架开发 web app 的时候一般都会用内建服务器开发和调试程序,等程序完成后再移交到生产环境部署.问题是这些内建服务器通常都不支持 HTTPS,我们想在开发 ...
- nginx + uwsgi + django/flask Nginx + php-fpm + PHP
后端服务器设置nginx + uwsgi + django/flask需要注意的问题 - ACE开发者 https://acejoy.com/2018/09/09/547/ 后端开发应用中,除了Ngi ...
- Django&,Flask&pyrthon原生sql语句 基本操作
Django框架 ,Flask框架 ORM 以及pyrthon原生sql语句操作数据库 WHAT IS ORM? ORM( Object Relational Mapping) 对象关系映射 , 即通 ...
- windows下apache + mod_wsgi + python部署flask接口服务
windows下apache + mod_wsgi + python部署flask接口服务 用python3安装虚拟环境 为啥要装虚拟环境? 原因1:安装虚拟环境是为了使项目的环境和全局环境隔离开,在 ...
- jmeter测试 flask 接口请求
jmeter测试 flask 接口请求 flask的代码如下: #!/usr/bin/env python # -*- coding: utf-8 -*- from flask import Flas ...
- python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架
Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...
- Django,Flask,Tornado三大框架对比,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架
Django 与 Tornado 各自的优缺点Django优点: 大和全(重量级框架)自带orm,template,view 需要的功能也可以去找第三方的app注重高效开发全自动化的管理后台(只需要使 ...
- tornado django flask 跨域解决办法(cors)
XMLHttpRequest cannot load http://www.baidu.com. No 'Access-Control-Allow-Origin' header is present ...
随机推荐
- mongodb之 3.4.0 mongodb sharing 副本集群搭建
系统系统 centos6.5三台服务器:10.100.25.42/43/44安装包: mongodb-linux-x86_64-rhel62-3.4.0.tgz 服务器规划:mongos mongos ...
- elasticsearch 镜像使用
elasticsearch 镜像使用 下载镜像: docker pull elasticsearch:6.5.4 创建容器: docker run -it -p 9200:9200 -p 9300:9 ...
- jmeter修改ServerAgent的默认端口号
jmeter修改ServerAgent的默认端口号 1 java -jar ./CMDRunner.jar --tool PerfMonAgent --udp-port 5555 --tcp-port ...
- NET设计模式 第二部分 创建型模式(4):工厂方法模式(Factory Method)
工厂方法模式(Factory Method) ——.NET设计模式系列之五 Terrylee,2004年1月2日 概述 在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实 ...
- mysql5.7 主从同步
一:进行bin-log日志配置 1设置bin-log日志 [mysqld] log-bin=//路径 #<===红色的加粗的省去 server-id = 1 #主库 2.检查配置登录数据 ...
- VSFTP再配置 我里个去马蛋网上这么多烂文章,走了好多弯路
1.CentOS 进行yum 安装 vsftpd 2.vi /etc/vsftpd/vsftpd.conf 进行配置 3.创建FTP 用户 # useradd –d /var/www -g ftp ...
- .NET使用Task动态创建多任务多线程并行程序计算Redis集群keys计算
Task是一个很好用的多任务处理类,并且通过Task可以对任务进行很好的控制. 下面将通过代码实现Redis集群在使用IServer.keys时通过多任务对多个服务器示例进行并行计算,并对返回key做 ...
- Linux下的Mysql安装 & 配置
Hive的数据,是存在HDFS里的.此外,hive有哪些数据库,每个数据库有哪些表,这样的信息称之为hive的元数据信息. 元数据信息不存在HDFS里.而是存在关系型数据库里,hive默认用的是der ...
- 廖雪峰Java4反射与泛型-2注解-1使用注解
1.Annotation定义 注解是放在Java源码的类.方法.字段.参数前的一种标签.如下 package com.reflection; import org.apache.logging.log ...
- 修改OBS为仅直播音频
准备工作: 1. VS2013 的最新更新版或者VS2015 2. QT Creater 5.7 https://www.qt.io/ 3. CMake (cmake-gui) 4. obs 依 ...