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官方文档。

猜你喜欢

转载自www.cnblogs.com/shuangzikun/p/python_taotao_new_django_flask.html
今日推荐