f7cba4a5 by Gruel

mysql config & cmd test

1 parent 93fa8104
certifi==2016.2.28
Django==2.1
# django-mysqlpool @ https://github.com/smartfile/django-mysqlpool/archive/master.zip
djangorestframework==3.9.0
djangorestframework-jwt==1.11.0
marshmallow==3.6.1
PyJWT==1.7.1
PyMuPDF==1.17.0
PyMySQL==0.9.3
pytz==2020.1
# simple-config @ http://gitlab.situdata.com/zhouweiqi/simple_config/repository/archive.tar.gz?ref=master
# situlogger @ http://gitlab.situdata.com/zhouweiqi/situlogger/repository/archive.tar.gz?ref=master
six==1.14.0
SQLAlchemy==0.9.10
webargs==6.1.0
......
http://gitlab.situdata.com/zhouweiqi/simple_config/repository/archive.tar.gz?ref=master
http://gitlab.situdata.com/zhouweiqi/situlogger/repository/archive.tar.gz?ref=master
https://github.com/smartfile/django-mysqlpool/archive/master.zip
\ No newline at end of file
......
import time
from django.core.management import BaseCommand
class Command(BaseCommand):
def handle(self, *args, **kwargs):
while True:
print(time.time())
time.sleep(5)
......@@ -3,7 +3,7 @@ from django.db import models
# Create your models here.
class Document(models.Model):
class UploadDocRecords(models.Model):
id = models.AutoField(primary_key=True, verbose_name="id")
application_id = models.CharField(max_length=64, verbose_name="申请id")
main_applicant = models.CharField(max_length=16, verbose_name="主申请人")
......@@ -21,5 +21,5 @@ class Document(models.Model):
class Meta:
managed = False
db_table = 'document'
db_table = 'upload_doc_records'
......
......@@ -3,7 +3,7 @@ from webargs import fields
from webargs.djangoparser import use_args, parser
from common.mixins import GenericView
from common import response
from .models import Document
from .models import UploadDocRecords
# Create your views here.
......@@ -14,16 +14,16 @@ def load_data(request, schema):
return request.data
application_data = {'applicationId': fields.Str(required=True)}
application_data_args = {'applicationId': fields.Str(required=True)}
applicant_data = {
applicant_data_args = {
'mainApplicantName': fields.Str(required=True),
'coApplicantName': fields.Str(required=True),
'guarantor1Name': fields.Str(required=True),
'guarantor2Name': fields.Str(required=True),
}
document = {
document_args = {
'documentName': fields.Str(required=True),
'documentScheme': fields.Str(required=True),
'businessType': fields.Str(required=True),
......@@ -32,10 +32,10 @@ document = {
'metadataVersionId': fields.Str(required=True),
}
doc_upload = {
'applicationData': fields.Nested(application_data, required=True),
'applicantData': fields.Nested(applicant_data, required=True),
'document': fields.Nested(document, required=True),
doc_upload_args = {
'applicationData': fields.Nested(application_data_args, required=True),
'applicantData': fields.Nested(applicant_data_args, required=True),
'document': fields.Nested(document_args, required=True),
}
......@@ -43,20 +43,23 @@ class DocView(GenericView):
permission_classes = []
# 创建模型
@use_args(doc_upload, location='data')
@use_args(doc_upload_args, location='data')
def post(self, request, args):
Document.objects.create(
application_id=args.get('applicationId'),
main_applicant=args.get('mainApplicantName'),
co_applicant=args.get('coApplicantName'),
guarantor_1=args.get('guarantor1Name'),
guarantor_2=args.get('guarantor2Name'),
document_name=args.get('documentName'),
document_scheme=args.get('documentScheme'),
business_type=args.get('businessType'),
data_source=args.get('dataSource'),
metadata_version_id=args.get('metadataVersionId'),
upload_finish_time=args.get('uploadFinishTime'),
application_data = args.get('applicationData')
applicant_data = args.get('applicantData')
document = args.get('document')
UploadDocRecords.objects.create(
application_id=application_data.get('applicationId'),
main_applicant=applicant_data.get('mainApplicantName'),
co_applicant=applicant_data.get('coApplicantName'),
guarantor_1=applicant_data.get('guarantor1Name'),
guarantor_2=applicant_data.get('guarantor2Name'),
document_name=document.get('documentName'),
document_scheme=document.get('documentScheme'),
business_type=document.get('businessType'),
data_source=document.get('dataSource'),
metadata_version_id=document.get('metadataVersionId'),
upload_finish_time=document.get('uploadFinishTime'),
)
self.running_log.info('[doc upload success] [args={0}]'.format(args))
return response.ok()
......
......@@ -11,7 +11,7 @@ https://docs.djangoproject.com/en/2.1/ref/settings/
"""
import os
from . import conf
from . import conf, database
from logging import config
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
......@@ -42,6 +42,7 @@ INSTALLED_APPS = [
'rest_framework',
'common',
'apps.account',
'apps.doc',
]
MIDDLEWARE = [
......@@ -78,12 +79,18 @@ WSGI_APPLICATION = 'wsgi.application'
# Database
# https://docs.djangoproject.com/en/2.1/ref/settings/#databases
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }
# }
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
'default': conf.get_namespace('MYSQL_')
}
DATABASE_ROUTERS = ['settings.database.DBRouter']
MYSQLPOOL_ARGUMENTS = database.MYSQLPOOL_ARGUMENTS
# Password validation
......
"""
Database
https://docs.djangoproject.com/en/1.11/ref/settings/#databases
"""
import pymysql
from django.db.models import options
pymysql.install_as_MySQLdb()
# 同一App下的Model可能会存储到不同的db,所以根据app_label来做db_router不是特别合适
# 所以添加situ_db_label来映射model到db
# 为Django的model的Meta添加额外的属性situ_db_label
options.DEFAULT_NAMES = tuple(list(options.DEFAULT_NAMES) + ['situ_db_label'])
# 数据库连接池配置
MYSQLPOOL_ARGUMENTS = {
'recycle': 30,
'pool_size': 128,
'max_overflow': 10,
'timeout': 5,
'use_threadlocal': True,
}
class DBRouter(object):
def db_for_read(self, model, **hints):
if hasattr(model._meta, 'situ_db_label'):
return model._meta.aft_db_label
return None
def db_for_write(self, model, **hints):
if hasattr(model._meta, 'situ_db_label'):
return model._meta.aft_db_label
return None
def allow_relation(self, obj1, obj2, **hints):
return True
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!