Skip to content

Instantly share code, notes, and snippets.

View AnyISalIn's full-sized avatar
:electron:

AnyISalIn AnyISalIn

:electron:
View GitHub Profile

为什么要自定义 Field 类型

首先,Django ModelForm 是根据 Model 属性的类型去生成对应的 Field 的类型,如果是 String,就是 TextInput,列表就是 MultiChoice/MultiValue,Password 就是 PasswordInput,但是我博客里面新建/修改文章的 Tag 是以一个 , 来分隔的,就像下面这一样。

所以我需要用 TextInput,并且 clean 直接不做任何处理直接返回,但是在 ArticleFormclean_tag_listsave 这两个方法里面处理 Tag

def clean_tag_list(self):
import logging
import time
from socket import *
from influxdb import InfluxDBClient
GRAPHITE_HOST = '192.168.20.103'
GRAPHITE_PORT = 2003
INFLUXDB_HOST = '192.168.20.183'
INFLUXDB_DATABASE = 'water_quality'
@AnyISalIn
AnyISalIn / db.py
Last active August 7, 2017 05:33
water_quality collect
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, Float, Boolean
Base = declarative_base()
engine = create_engine('mssql+pymssql://sa:[email protected]/tempdb')
Session = sessionmaker(bind=engine)
session = Session()
from functools import wraps
import inspect
import datetime
def cache(exp=0):
def _cache(fn): ## fn cache
cache = {}
@wraps(fn)
def wrap(*args, **kwargs):
# TODO key 如何拼装
@AnyISalIn
AnyISalIn / test_data.py
Last active July 21, 2017 06:00
water quality test data
from datetime import datetime
from water_quality.security import WaterCipher
import csv
import requests
import logging
import json
TITLE = ['TIMESTAMP', 'Turbid', 'TOC', 'COD', 'DOC', 'NH3']
from functools import wraps
from time import sleep
# coroutine 先要用 next 语句调用一次
def coroutine(fn):
@wraps(fn)
def wrapper(*args, **kwargs):
ret = fn(*args, **kwargs)
next(ret)
return ret
import pymysql
from pymysql.cursors import DictCursor
class SQLExecutor(object):
def __init__(self, *args, **kwargs):
self._conn = pymysql.Connect(*args, **kwargs)
def _execute(self, sql):