不使用django的代码生成机制,自定义rest服务并注册
1、新建一个django项目
django-admin startproject aidemo .
2、生成一套新的app
python manage.py startapp aivisit
3、引入django_rest
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'aivisit'
]
4、注册url
from aivisit.views import TestView
urlpatterns = [
path('api/test', TestView.as_view(), name='test'),
]
5、view代码
from django.shortcuts import render
from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework.views import APIView
# Create your views here.
# @action(methods=['get'], detail=False, url_name='test')
class TestView(APIView):
def get(self, request, *args, **kwargs):
data = {
'id': '001',
'username': 'zhangsan',
}
return Response(data)
6、增加文档说明
setting.py
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': [
'utils.response.FitJSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer'
],
'DEFAULT_FILTER_BACKENDS': [
'django_filters.rest_framework.DjangoFilterBackend',
'rest_framework.filters.SearchFilter',
'rest_framework.filters.OrderingFilter'
],
'DEFAULT_PAGINATION_CLASS': 'utils.pagination.MyPagination',
'DATETIME_FORMAT': '%Y-%m-%d %H:%M:%S',
'DATE_FORMAT': '%Y-%m-%d',
'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
}
urls.py
urlpatterns = [
path('api/test', TestView.as_view(), name='test'),
# api文档
path('api/docs/', include_docs_urls(title="接口文档", authentication_classes=[], permission_classes=[])),
]
7、部署
pip install django=3.2.19 #太高了要求数据库mysql版本在MySQL 8 以上
pip install djangorestframework
pip install coreapi
python3 manage.py runserver 0.0.0.0:5010
找到 ALLOWED_HOSTS = [] 修改为ALLOWED_HOSTS = ['*']
8、安装部署nginx
yum install nginx
systemctl start nginx
9、测试
http://xxx:6010/api/test #django
http://xxx:6019/images/ #nginx
10、连接mysql的问题
pip install pymysql
在项目同级目录的__init__文件中添加配置
import pymysql
pymysql.version_info=(1,4,3,"final",0) # 指定了pymysql的版本:1.4.3,按照你版本修改
pymysql.install_as_MySQLdb()
11、解决跨域问题
pip install django-cors-headers
在setting.py中增加
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_HEADERS = ('*')
CORS_ALLOW_CREDENTIALS = True
INSTALLED_APPS = (
...
'corsheaders'
)
MIDDLEWARE = [
...
'corsheaders.middleware.CorsMiddleware',
...
]