Hi Jonathan,
I try your code, it work well, I can select records from
http://127.0.0.1:8080/myapp/appadmin/select/db/mytable now. I find the
two modifications in select function is :
1) Replace "query='%s.id>0' % table" with "query = dbname + '.' +
table + '.id>0'"
2) Replace "records=db(query).select
(limitby=limitby,orderby=orderby)" with "records=db(eval(query)).select
(limitby=limitby,orderby=orderby)"
I hope appadmin in next version will work well on GAE!
On 11月23日, 下午12时03分, Jonathan Benn <[EMAIL PROTECTED]> wrote:
> Hi Sharekey,
>
> On Nov 21, 5:41 am, sharekey <[EMAIL PROTECTED]> wrote:
>
> > I try my test follow your steps, but it still doesn't work yet.
> > The browser print "No databases in this application" message as
> > before. howerver, thanks for your help!
>
> Here is the full code, with all modifications included. Remember, as
> Massimo and Yarko said, do *not* upload this file to the production
> GAE server, or else anyone on the Internet will be able to modify your
> application's data.
>
> ###########################################################
> ### make sure administrator is on localhost
> ############################################################
>
> import os, socket
> import gluon.contenttype
> import gluon.fileutils
>
> http_host = request.env.http_host.split(':')[0]
> remote_addr = request.env.remote_addr
> #try: hosts=(http_host, socket.gethostbyname(remote_addr))
> #except: hosts=(http_host,)
> #if remote_addr not in hosts:
> # raise HTTP(400)
> #if not gluon.fileutils.check_credentials(request):
> # redirect('/admin')
>
> response.view='appadmin.html'
> response.menu=[[T('design'),False,'/admin/default/design/%s' %
> request.application],
> [T('db'),False,'/%s/%s/index' % (request.application,
> request.controller)],
> [T('state'),False,'/%s/%s/state' %
> (request.application, request.controller)]]
>
> ###########################################################
> ### list all tables in database
> ############################################################
>
> def index():
> import types as _types
> _dbs={}
>
> GQLDB = gluon.contrib.gql.GQLDB
>
> try: GQLDB
> except: GQLDB=SQLDB
> for _key,_value in globals().items():
> if isinstance(_value,GQLDB):
> tables=_dbs[_key]=[]
> for _tablename in _value.tables:
> tables.append((_key,_tablename))
>
> return dict(dbs=_dbs)
>
> ###########################################################
> ### insert a new record
> ############################################################
>
> def insert():
> try:
> dbname=request.args[0]
> db=eval(dbname)
> table=db[request.args[1]]
> except:
> session.flash=T('invalid request')
> redirect(URL(r=request,f='index'))
> form=SQLFORM(table)
> if form.accepts(request.vars,session):
> response.flash=T('new record inserted')
> return dict(form=form)
>
> ###########################################################
> ### list all records in table and insert new record
> ############################################################
>
> def download():
> import os
> dbname=request.args[0]
> ### for GAE only ###
> tablename,fieldname=request.args[1].split('.')[:2]
> uploadfield=eval(dbname)[tablename][fieldname].uploadfield
> filename=request.args[1]
> if isinstance(uploadfield,str):
> from gluon.contenttype import contenttype
> response.headers['Content-Type']=contenttype(filename)
> db=eval(dbname)
> rows=db(db[tablename][fieldname]==filename).select()
> return rows[0][uploadfield]
> ### end for GAE ###
> filename=os.path.join(request.folder,'uploads/',filename)
> return response.stream(open(filename,'rb'))
>
> def csv():
> import gluon.contenttype
> response.headers['Content-Type']=gluon.contenttype.contenttype
> ('.csv')
> try:
> dbname=request.vars.dbname
> db=eval(dbname)
> response.headers['Content-disposition']="attachment; filename=
> %s_%s.csv" % (request.vars.dbname, request.vars.query.split('.',1)[0])
> return str(db(request.vars.query).select())
> except:
> session.flash=T('unable to retrieve data')
> redirect(URL(r=request,f='index'))
>
> def import_csv(table,file):
> import csv
> reader = csv.reader(file)
> colnames=None
> for line in reader:
> if not colnames:
> colnames=[x[x.find('.')+1:] for x in line]
> c=[i for i in range(len(line)) if colnames[i]!
> ='id']
> else:
> items=[(colnames[i],line[i]) for i in c]
> table.insert(**dict(items))
>
> def select():
> try:
> dbname=request.args[0]
> db=eval(dbname)
> if request.vars.query:
> query=request.vars.query
> orderby=None
> start=0
> elif request.vars.orderby:
> query=session.appadmin_last_query
> orderby=request.vars.orderby
> if orderby==session.appadmin_last_orderby:
> if orderby[-5:]==' DESC': oderby=orderby[:-5]
> else: orderby=orderby+' DESC'
> start=0
> elif request.vars.start!=None:
> query=session.appadmin_last_query
> orderby=session.appadmin_last_orderby
> start=int(request.vars.start)
> else:
> table=request.args[1]
> query = dbname + '.' + table + '.id>0'
> orderby=None
> start=0
> session.appadmin_last_query=query
> session.appadmin_last_orderby=orderby
> limitby=(start,start+100)
> except:
> session.flash=T('invalid request')
> redirect(URL(r=request,f='index'))
> if request.vars.csvfile!=None:
> try:
> import_csv(db[table],request.vars.csvfile.file)
> response.flash=T('data uploaded')
> except:
> response.flash=T('unable to parse csv file')
> if request.vars.delete_all and
> request.vars.delete_all_sure=='yes':
> try:
> db(query).delete()
> response.flash=T('records deleted')
> except:
> response.flash=T('invalid SQL FILTER')
> elif request.vars.update_string:
> try:
> env=dict(db=db,query=query)
> exec('db(query).update('+request.vars.update_string+')')
> in env
> response.flash=T('records updated')
> except:
> response.flash=T('invalid SQL FILTER or UPDATE STRING')
> try:
> records=db(eval(query)).select
> (limitby=limitby,orderby=orderby)
> except:
> response.flash=T('invalid SQL FILTER')
> return dict(records=T('no
> records'),nrecords=0,query=query,start=0)
> linkto=URL(r=request,f='update',args=[dbname])
> upload=URL(r=request,f='download',args=[dbname])
> return dict(start=start,query=query,orderby=orderby, \
> nrecords=len(records),\
> records=SQLTABLE
> (records,linkto,upload,orderby=True,_class='sortable'))
>
> ###########################################################
> ### edit delete one record
> ############################################################
>
> def update():
> try:
> dbname=request.args[0]
> db=eval(dbname)
> table=request.args[1]
> except:
> response.flash=T('invalid request')
> redirect(URL(r=request,f='index'))
> try:
> id=int(request.args[2])
> record=db(db[table].id==id).select()[0]
> except:
> session.flash=T('record does not exist')
> redirect(URL(r=request,f='select/%s/%s'%(dbname,table)))
> form=SQLFORM(db[table],record,deletable=True,
> linkto=URL(r=request,f='select',args=[dbname]),
> upload=URL(r=request,f='download',args=[dbname]))
> if form.accepts(request.vars,session):
> response.flash=T('done!')
> redirect(URL(r=request,f='select/%s/%s'%(dbname,table)))
> return dict(form=form)
>
> ###########################################################
> ### get global variables
> ############################################################
>
> def state():
> return dict(state=request.env)
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"web2py Web Framework" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---