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 web2py@googlegroups.com
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to