是的,纯Python!
不用html,不用css,不用java script…以及多如牛毛汗牛充栋各种牛逼闪亮的前端技术,100%python可以搭建一个数据库查询网站。
用Streamlit可以做到!另外只用了numpy和sqlite,代码不到60行,其中还包含几行防注入攻击的代码。Streamlit官网的文档也太过于简略了,网上资料又比较少,所以特此分享。
该案例已经过简化,在本地跑没问题,做过验证。待有时间把它部署到网上,届时再和大家分享部署的心得。
界面是这样式儿滴:
数据库检索结果呈现:
代码是这样式儿滴:
#coding:utf-8
import streamlit as st
import numpy as np
import sqlite3
class Query:
def __init__(self,cas_number):
self.__casno=cas_number
def CasnumberQuery(self):
result_list_0=[]
row=0
cas_query_0='''SELECT ori_sn,casno,cnname,enname,remark,legid FROM CNOTHERS WHERE casno='CAS_X';'''
cas_query_1=cas_query_0.replace('CAS_X',str(self.__casno))
result_0=chemicals.execute(cas_query_1)
for chem in result_0:#解包到列表中
result_list_0.append(chem[5])
result_set_0=set(result_list_0)#转换列表为集合(可去重)
if len(result_set_0)==0:#如果列表为空,意味着未检索到结果
return None
else:
leg_query='''SELECT leg_cn,leg_en,pub_date FROM CNLAWS WHERE legid='LEG_X';'''
leg_arr=np.empty((len(result_set_0)+1,3),object)#为储存查询结果,预制了一个空数组
leg_arr[0,:]=(['法规中文名称','English Title','发布日期'])#标题列
for leg_id in result_set_0:#将数据库检索结果写入数组
leg_query_1=leg_query.replace('LEG_X',leg_id)
leg_result_1=chemicals.execute(leg_query_1).fetchone()
row+=1
leg_arr[row,:]=([leg_result_1[0],leg_result_1[1],leg_result_1[2]])
return leg_arr#返回数组
def findillegalchar(casnum):
'''
检验查询输入字符,防止注入攻击
'''
safetynum=['0','1','2','3','4','5','6','7','8','9','-']
for char in casnum:
if char not in safetynum:
return char
st.title('化学品关联法规查询')
warehouse=sqlite3.connect(r'C:\chemicals\chem2reg\cisdatabase.db')
chemicals=warehouse.cursor()
whichcasno=st.text_input('Enter CAS number', value='', max_chars=None, key=None, type='default', help='CAS号形如1336-21-6')
if whichcasno!='':
if findillegalchar(whichcasno):
st.write(whichcasno,'包含非法字符:',findillegalchar(whichcasno))
else:
st.write(whichcasno,'的关联法规为:')
query_test=Query(whichcasno)
df_result_0=query_test.CasnumberQuery()
if df_result_0 is not None:
st.dataframe(data=df_result_0)
else:
st.write('oops!未检索到关联法规数据')
以上代码的注释应该是比较明了的,如果有问题请留言,必知无不言。
作为业外人士,说句搓火的话,我觉得大牛都是在后端,不屑于做前端。所以直到今天,前端技术乱七八糟的,也没个人一统江湖。话说回来,赚钱还是前端赚钱,不过也都是辛苦钱。
Streamlit仍在发展中,盼望功能早日更加强大。