bugfix
This commit is contained in:
parent
eccc639610
commit
41e03aac46
152
README.md
152
README.md
@ -251,11 +251,35 @@ when ahserver running behind the nginx, nginx should be forward following header
|
|||||||
* X-Forwarded-Scheme: scheme in client browser
|
* X-Forwarded-Scheme: scheme in client browser
|
||||||
* X-Forwarded-Host: host in client browser
|
* X-Forwarded-Host: host in client browser
|
||||||
* X-Forwarded-Url: url in client browser
|
* X-Forwarded-Url: url in client browser
|
||||||
|
* X-Forwarded-Prepath: subfolder name if if ahserver is behind nginx and use subfolder proxy.
|
||||||
|
|
||||||
## environment for processors
|
## environment for processors
|
||||||
|
|
||||||
When coding in processors, ahserver provide some environment stuff for build apllication, there are modules, functions, classes and variables
|
When coding in processors, ahserver provide some environment stuff for build apllication, there are modules, functions, classes and variables
|
||||||
|
|
||||||
|
### session environment
|
||||||
|
|
||||||
|
* async get_user()
|
||||||
|
a coroutine to get userid if user not login, it return None
|
||||||
|
* async remember_user(userid, username='', userorgid='')
|
||||||
|
a coroutine to set session user info: userid, name, orgid
|
||||||
|
* async forget_user()
|
||||||
|
a coroutine to forget session user information, and get_user() will return None
|
||||||
|
* async redirect(url)
|
||||||
|
a coroutine to redirect request to a new url
|
||||||
|
* entire_url(url)
|
||||||
|
a function to convert url to a url with http(s)://servername:port/repath/.... format, a outside url will return argument's url without change.
|
||||||
|
* aiohttp_client
|
||||||
|
aiohttp_client is aiohttp.client class to make a new request to other server
|
||||||
|
* gethost()
|
||||||
|
a function to get client ip
|
||||||
|
* async path_call(path, **kw)
|
||||||
|
a coroutine to call other source in server with path
|
||||||
|
* params_kw
|
||||||
|
dictionary to storages data tranafers from client. if files upload from client, upload file stored under the folder defined in configure file named by "files", the params_kw only storage the subpath under "files" defined folder.
|
||||||
|
|
||||||
|
### global environment
|
||||||
|
|
||||||
|
|
||||||
### modules:
|
### modules:
|
||||||
* time
|
* time
|
||||||
@ -264,18 +288,122 @@ When coding in processors, ahserver provide some environment stuff for build apl
|
|||||||
* json
|
* json
|
||||||
|
|
||||||
### functions:
|
### functions:
|
||||||
* configValue
|
* configValue(k):
|
||||||
* isNone
|
function return configuration file value in k, k is start with '.', examples: configValue('.website') will return website value in configuration file; configValue('.website.port') will return port under website in configuration file.
|
||||||
* int
|
|
||||||
* str
|
* isNone(v)
|
||||||
* float
|
a function check v is or not None, if is return True, else return False
|
||||||
* type
|
* int(v)
|
||||||
* str2date
|
a function to convert v to integer
|
||||||
* str2datetime
|
* str(v)
|
||||||
* curDatetime
|
a function to convert v to string
|
||||||
* uuid
|
* float(v)
|
||||||
* runSQL
|
a function to convert v to float
|
||||||
* runSQLPaging
|
* type(v)
|
||||||
|
a function to get v's type
|
||||||
|
* str2date(dstr)
|
||||||
|
a function to convert string with "YYYY-MM-DD" format to datetime.datetime instance
|
||||||
|
* str2datetime(dstr)
|
||||||
|
a function to convert string with "YYYY-MM-DD" format to datetime.datetime instance
|
||||||
|
* curDatetime()
|
||||||
|
a function to get current date and time in datetime.datetime instsance
|
||||||
|
* uuid()
|
||||||
|
a function to get a uuid value
|
||||||
|
* DBPools()
|
||||||
|
a function to get a db connection from sqlor connection pool, further infor see [sqlor](https://git.kaiyuancloud.cn/yumoqing/sqlor)
|
||||||
|
|
||||||
|
all the databases it can connected to need to defiend in 'databases' in configuration file.
|
||||||
|
|
||||||
|
CRUD use case:
|
||||||
|
|
||||||
|
by use CRUD, the table must have a id field as primay key.
|
||||||
|
|
||||||
|
CRUD use case 1(insert data to table. in a insert.dspy file)
|
||||||
|
```
|
||||||
|
db = DBPools()
|
||||||
|
async with db.sqlorContext('dbname1') as sor:
|
||||||
|
ns = {
|
||||||
|
'id':uuid(),
|
||||||
|
'field1':1
|
||||||
|
}
|
||||||
|
recs = await sor.C('tbl1', ns)
|
||||||
|
```
|
||||||
|
|
||||||
|
CRUD use case 2(update data in table. in a update.dspy file)
|
||||||
|
```
|
||||||
|
ns = params_kw.copy() # get data from client
|
||||||
|
db = DBPools()
|
||||||
|
async with db.sqlorContext('dbname1') as sor:
|
||||||
|
await sor.U('tbl1', ns)
|
||||||
|
```
|
||||||
|
CRUD use case 3(delete data in table. in a delete.dspy file)
|
||||||
|
```
|
||||||
|
ns = {
|
||||||
|
'id':params_kw.id
|
||||||
|
}
|
||||||
|
db = DBPools()
|
||||||
|
async with db.sqlorContext('dbname1') as sor:
|
||||||
|
await sor.D('tbl1', ns)
|
||||||
|
```
|
||||||
|
CRUD use case 4(query date from table, in a search.dspy file)
|
||||||
|
```
|
||||||
|
ns = params_kw.copy()
|
||||||
|
db = DBPools()
|
||||||
|
async with db.sqlorContext('dbname1') as sor:
|
||||||
|
recs = await sor.R('tbl1', ns)
|
||||||
|
# recs is d list with element is a DictObject instance with all the table fields data
|
||||||
|
return recs
|
||||||
|
```
|
||||||
|
CRUD use case 5(paging query data from table, in a search_paging.dspy file)
|
||||||
|
```
|
||||||
|
ns = params_kw.copy()
|
||||||
|
if ns.get('page') is None:
|
||||||
|
ns['page'] = 1
|
||||||
|
if ns.get('sort') is None:
|
||||||
|
ns['sort'] = 'id desc'
|
||||||
|
db = DBPools()
|
||||||
|
async with db.sqlorContext('dbname1') as sor:
|
||||||
|
recs = await sor.RP('tbl1', ns)
|
||||||
|
# recs is a DictObject instance with two keys: "total": result records, "rows" return data list
|
||||||
|
# example:
|
||||||
|
# {
|
||||||
|
# "total":423123,
|
||||||
|
# "rows":[ ..... ] max record is "pagerows" in ns, default is 80
|
||||||
|
# }
|
||||||
|
return recs
|
||||||
|
```
|
||||||
|
|
||||||
|
SQL EXECUTE use case 1
|
||||||
|
```
|
||||||
|
sql = "..... where id=${id}$ and field1 = ${var1}$ ..."
|
||||||
|
db = DBPools()
|
||||||
|
async with db.sqlorContext('dbname') as sor:
|
||||||
|
r = await sor.sqlExe(sql, {'id':'iejkuiew', 'var1':1111})
|
||||||
|
# if sql is a select command, r is a list with data returned, is a instance of DictObject
|
||||||
|
....
|
||||||
|
```
|
||||||
|
|
||||||
|
SQL EXECUTE use case 2
|
||||||
|
```
|
||||||
|
sql = "..... where id=${id}$ and field1 = ${var1}$ ..."
|
||||||
|
db = DBPools()
|
||||||
|
async with db.sqlorContext('dbname') as sor:
|
||||||
|
r = await sor.sqlPaging(sql, {'id':'iejkuiew',
|
||||||
|
'page':1,
|
||||||
|
'pagerows':60,
|
||||||
|
'sort':'field1',
|
||||||
|
'var1':1111})
|
||||||
|
# r is a DictObject instance with two keys: "total": result records, "rows" return data list
|
||||||
|
# example:
|
||||||
|
# {
|
||||||
|
# "total":423123,
|
||||||
|
# "rows":[ ..... ] max record is "pagerows" in ns, default is 80
|
||||||
|
# }
|
||||||
|
....
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* runSQLIterator
|
* runSQLIterator
|
||||||
* runSQLResultFields
|
* runSQLResultFields
|
||||||
* getTables
|
* getTables
|
||||||
|
Loading…
Reference in New Issue
Block a user