├── .gitignore ├── _project ├── docs ├── en │ ├── _static │ │ ├── bae1.png │ │ ├── bae2.png │ │ ├── bae3.png │ │ ├── bae4.png │ │ ├── bae5.png │ │ ├── bae6.png │ │ ├── error.png │ │ ├── first.png │ │ ├── gevent_01.png │ │ ├── heroku1.png │ │ ├── heroku2.png │ │ ├── heroku3.png │ │ ├── menus_app.png │ │ ├── new.png │ │ ├── plugs_todo_first.png │ │ ├── plugs_todo_index.png │ │ ├── uliweb_media.png │ │ ├── uliweb_small.png │ │ ├── upload_01.png │ │ └── view_index.png │ ├── architecture.md │ ├── conf.py │ ├── deployment.md │ ├── exclude.txt │ ├── extending.md │ ├── form.md │ ├── globals.md │ ├── guestbook.md │ ├── hello_uliweb.md │ ├── i18n.md │ ├── index.md │ ├── installation.md │ ├── introduction.md │ ├── manage_guide.md │ ├── orm.md │ ├── template.md │ ├── update.md │ └── url_mapping.md ├── index.html ├── make.bat ├── make.sh ├── static │ ├── jquery-1.7.2.min.js │ └── jquery.cookie.js ├── templates │ ├── default.html │ ├── index.html │ └── layout.html └── zh_CN │ ├── uliweb │ ├── _static │ │ ├── bae1.png │ │ ├── bae2.png │ │ ├── bae3.png │ │ ├── bae4.png │ │ ├── bae5.png │ │ ├── bae6.png │ │ ├── blog_layout.jpg │ │ ├── blog_run_first.png │ │ ├── blogs │ │ │ └── admin_layout.png │ │ ├── error.png │ │ ├── first.png │ │ ├── gevent_01.png │ │ ├── heroku1.png │ │ ├── heroku2.png │ │ ├── heroku3.png │ │ ├── menus_app.png │ │ ├── new.png │ │ ├── plugs_todo_first.png │ │ ├── plugs_todo_index.png │ │ ├── uliweb_media.png │ │ ├── uliweb_small.png │ │ ├── upload_01.png │ │ └── view_index.png │ ├── app │ │ ├── celery.md │ │ ├── clean.md │ │ ├── objcache.md │ │ ├── recorder.md │ │ └── sequence.md │ ├── app_auth.md │ ├── app_csrf.md │ ├── app_rbac.md │ ├── app_secretkey.md │ ├── app_soap.md │ ├── app_staticfiles.md │ ├── app_template.md │ ├── app_upload.md │ ├── architecture.md │ ├── articles │ │ ├── auth_type.md │ │ ├── css_js_combine.md │ │ ├── find_option.md │ │ ├── gevent_support.md │ │ ├── jqcookie.md │ │ ├── multitable_query.md │ │ ├── nginx_cfg.md │ │ ├── sqlite_timeout.md │ │ ├── svg_mimetype_config.md │ │ ├── tornado_support.md │ │ ├── url_prefix.md │ │ ├── what_does_model_init_does.md │ │ └── xhr_redirect_json.md │ ├── bae.md │ ├── basic.md │ ├── blogs │ │ ├── admin_layout.md │ │ ├── blog_add.md │ │ ├── blog_design.md │ │ ├── codes │ │ │ └── 01 │ │ │ │ ├── admin_layout.css │ │ │ │ └── admin_layout.html │ │ ├── create_project.md │ │ ├── globle_design.md │ │ └── introduction.md │ ├── cache.md │ ├── command.md │ ├── common_apis.md │ ├── compat.md │ ├── conf.py │ ├── db │ │ ├── api.md │ │ ├── faq.md │ │ ├── introduction.md │ │ ├── multidb.md │ │ └── orm.md │ ├── debug_with_pycharm.md │ ├── deployment.md │ ├── exclude.txt │ ├── form.md │ ├── generic.md │ ├── globals.md │ ├── guestbook.md │ ├── hello_uliweb.md │ ├── heroku.md │ ├── i18n.md │ ├── index.md │ ├── installation.md │ ├── introduction.md │ ├── log.md │ ├── mail.md │ ├── manage_guide.md │ ├── middleware.md │ ├── plugs │ │ ├── apps.md │ │ ├── dialog2.md │ │ └── menus.md │ ├── plugs_todo.md │ ├── sae.md │ ├── session.md │ ├── settings.md │ ├── taglibs.md │ ├── template.md │ ├── test.md │ ├── uliweb_apps.md │ ├── uliweb_ui │ │ ├── apis.md │ │ └── rgrid.md │ ├── update │ │ ├── update_0.1.4.md │ │ ├── update_0.1.5.md │ │ ├── update_0.1.6.md │ │ ├── update_0.1.7.md │ │ ├── update_0.2.1.md │ │ ├── update_0.2.2.md │ │ ├── update_0.2.3.md │ │ ├── update_0.2.4.md │ │ ├── update_0.2.5.md │ │ ├── update_0.2.6.md │ │ ├── update_0.2.md │ │ ├── update_0.3.1.md │ │ ├── update_0.3.md │ │ ├── update_0.4.1.md │ │ ├── update_0.4.md │ │ └── update_0.5.md │ ├── url_mapping.md │ ├── utils │ │ └── workers.md │ ├── views.md │ ├── whouse.md │ └── xmlrpc.md │ └── uliweb3 │ ├── _static │ ├── apijson_todo_01.png │ ├── apijson_todo_02.png │ ├── bae1.png │ ├── bae2.png │ ├── bae3.png │ ├── bae4.png │ ├── bae5.png │ ├── bae6.png │ ├── blog_layout.jpg │ ├── blog_run_first.png │ ├── blogs │ │ └── admin_layout.png │ ├── debug_with_pycharm_01.png │ ├── debug_with_pycharm_02.png │ ├── debug_with_pycharm_03.png │ ├── debug_with_pycharm_04.png │ ├── error.png │ ├── first.png │ ├── gantt01.png │ ├── gevent_01.png │ ├── heroku1.png │ ├── heroku2.png │ ├── heroku3.png │ ├── menus_app.png │ ├── new.png │ ├── plugs_todo_first.png │ ├── plugs_todo_index.png │ ├── ulipad_0310.PNG │ ├── uliweb_media.png │ ├── uliweb_small.png │ ├── upload_01.png │ └── view_index.png │ ├── app │ ├── auth.md │ ├── celery.md │ ├── clean.md │ ├── csrf.md │ ├── objcache.md │ ├── rbac.md │ ├── recorder.md │ ├── secretkey.md │ ├── sequence.md │ ├── soap.md │ ├── staticfiles.md │ ├── template.md │ ├── timezone.md │ └── upload.md │ ├── architecture.md │ ├── articles │ ├── auth_type.md │ ├── css_js_combine.md │ ├── find_option.md │ ├── gevent_support.md │ ├── jqcookie.md │ ├── multitable_query.md │ ├── nginx_cfg.md │ ├── sqlite_timeout.md │ ├── svg_mimetype_config.md │ ├── tornado_support.md │ ├── url_prefix.md │ ├── what_does_model_init_does.md │ └── xhr_redirect_json.md │ ├── bae.md │ ├── basic.md │ ├── blogs │ ├── admin_layout.md │ ├── blog_add.md │ ├── blog_design.md │ ├── codes │ │ └── 01 │ │ │ ├── admin_layout.css │ │ │ └── admin_layout.html │ ├── create_project.md │ ├── globle_design.md │ └── introduction.md │ ├── cache.md │ ├── command.md │ ├── common_apis.md │ ├── compat.md │ ├── conf.py │ ├── db │ ├── api.md │ ├── faq.md │ ├── introduction.md │ ├── multidb.md │ └── orm.md │ ├── debug_with_pycharm.md │ ├── deployment.md │ ├── exclude.txt │ ├── form.md │ ├── generic.md │ ├── globals.md │ ├── heroku.md │ ├── i18n.md │ ├── index.md │ ├── installation.md │ ├── introduction.md │ ├── log.md │ ├── mail.md │ ├── manage_guide.md │ ├── middleware.md │ ├── sae.md │ ├── session.md │ ├── settings.md │ ├── taglibs.md │ ├── template.md │ ├── test.md │ ├── tutorial │ ├── guestbook.md │ ├── hello_uliweb.md │ ├── todo_apijson.md │ └── todo_basic.md │ ├── uliweb_apps.md │ ├── uliweb_ui │ ├── apis.md │ └── rgrid.md │ ├── update │ ├── update_0.1.4.md │ ├── update_0.1.5.md │ ├── update_0.1.6.md │ ├── update_0.1.7.md │ ├── update_0.2.1.md │ ├── update_0.2.2.md │ ├── update_0.2.3.md │ ├── update_0.2.4.md │ ├── update_0.2.5.md │ ├── update_0.2.6.md │ ├── update_0.2.md │ ├── update_0.3.1.md │ ├── update_0.3.md │ ├── update_0.4.1.md │ ├── update_0.4.md │ └── update_0.5.md │ ├── url_mapping.md │ ├── utils │ └── workers.md │ ├── views.md │ ├── whouse.md │ └── xmlrpc.md └── projects ├── .gitignore ├── uliweb ├── generic_blog │ ├── apps │ │ ├── blog │ │ │ ├── __init__.py │ │ │ ├── conf.py │ │ │ ├── info.ini │ │ │ ├── models.py │ │ │ ├── settings.ini │ │ │ ├── static │ │ │ │ └── readme.txt │ │ │ ├── templates │ │ │ │ ├── BlogView │ │ │ │ │ ├── add.html │ │ │ │ │ ├── edit.html │ │ │ │ │ ├── layout.html │ │ │ │ │ ├── list.html │ │ │ │ │ └── view.html │ │ │ │ └── readme.txt │ │ │ └── views.py │ │ └── settings.ini │ ├── fcgi_handler.fcgi │ └── wsgi_handler.py ├── guestbook │ ├── .gitignore │ ├── apps │ │ ├── GuestBook │ │ │ ├── __init__.py │ │ │ ├── forms.py │ │ │ ├── models.py │ │ │ ├── settings.ini │ │ │ ├── static │ │ │ │ └── delete.gif │ │ │ ├── templates │ │ │ │ ├── base.html │ │ │ │ ├── error.html │ │ │ │ ├── index.html │ │ │ │ └── new_comment.html │ │ │ └── views.py │ │ ├── ckeditor │ │ │ ├── __init__.py │ │ │ ├── conf.py │ │ │ ├── info.ini │ │ │ ├── static │ │ │ │ └── ckeditor │ │ │ │ │ ├── .htaccess │ │ │ │ │ ├── CHANGES.html │ │ │ │ │ ├── LICENSE.html │ │ │ │ │ ├── ckeditor.js │ │ │ │ │ ├── ckeditor_basic.js │ │ │ │ │ ├── config.js │ │ │ │ │ ├── contents.css │ │ │ │ │ ├── images │ │ │ │ │ └── spacer.gif │ │ │ │ │ ├── lang │ │ │ │ │ ├── _languages.js │ │ │ │ │ ├── _translationstatus.txt │ │ │ │ │ ├── af.js │ │ │ │ │ ├── ar.js │ │ │ │ │ ├── bg.js │ │ │ │ │ ├── bn.js │ │ │ │ │ ├── bs.js │ │ │ │ │ ├── ca.js │ │ │ │ │ ├── cs.js │ │ │ │ │ ├── da.js │ │ │ │ │ ├── de.js │ │ │ │ │ ├── el.js │ │ │ │ │ ├── en-au.js │ │ │ │ │ ├── en-ca.js │ │ │ │ │ ├── en-uk.js │ │ │ │ │ ├── en.js │ │ │ │ │ ├── eo.js │ │ │ │ │ ├── es.js │ │ │ │ │ ├── et.js │ │ │ │ │ ├── eu.js │ │ │ │ │ ├── fa.js │ │ │ │ │ ├── fi.js │ │ │ │ │ ├── fo.js │ │ │ │ │ ├── fr-ca.js │ │ │ │ │ ├── fr.js │ │ │ │ │ ├── gl.js │ │ │ │ │ ├── gu.js │ │ │ │ │ ├── he.js │ │ │ │ │ ├── hi.js │ │ │ │ │ ├── hr.js │ │ │ │ │ ├── hu.js │ │ │ │ │ ├── is.js │ │ │ │ │ ├── it.js │ │ │ │ │ ├── ja.js │ │ │ │ │ ├── km.js │ │ │ │ │ ├── ko.js │ │ │ │ │ ├── lt.js │ │ │ │ │ ├── lv.js │ │ │ │ │ ├── mn.js │ │ │ │ │ ├── ms.js │ │ │ │ │ ├── nb.js │ │ │ │ │ ├── nl.js │ │ │ │ │ ├── no.js │ │ │ │ │ ├── pl.js │ │ │ │ │ ├── pt-br.js │ │ │ │ │ ├── pt.js │ │ │ │ │ ├── ro.js │ │ │ │ │ ├── ru.js │ │ │ │ │ ├── sk.js │ │ │ │ │ ├── sl.js │ │ │ │ │ ├── sr-latn.js │ │ │ │ │ ├── sr.js │ │ │ │ │ ├── sv.js │ │ │ │ │ ├── th.js │ │ │ │ │ ├── tr.js │ │ │ │ │ ├── uk.js │ │ │ │ │ ├── vi.js │ │ │ │ │ ├── zh-cn.js │ │ │ │ │ └── zh.js │ │ │ │ │ ├── plugins │ │ │ │ │ ├── about │ │ │ │ │ │ ├── dialogs │ │ │ │ │ │ │ ├── about.js │ │ │ │ │ │ │ └── logo_ckeditor.png │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── basicstyles │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── blockquote │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── button │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── clipboard │ │ │ │ │ │ ├── dialogs │ │ │ │ │ │ │ └── paste.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── colorbutton │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── contextmenu │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── dialog │ │ │ │ │ │ ├── dialogDefinition.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── dialogui │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── domiterator │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── editingblock │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── elementspath │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── enterkey │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── entities │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── fakeobjects │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── filebrowser │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── find │ │ │ │ │ │ ├── dialogs │ │ │ │ │ │ │ └── find.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── flash │ │ │ │ │ │ ├── dialogs │ │ │ │ │ │ │ └── flash.js │ │ │ │ │ │ ├── images │ │ │ │ │ │ │ └── placeholder.png │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── floatpanel │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── font │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── format │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── forms │ │ │ │ │ │ ├── dialogs │ │ │ │ │ │ │ ├── button.js │ │ │ │ │ │ │ ├── checkbox.js │ │ │ │ │ │ │ ├── form.js │ │ │ │ │ │ │ ├── hiddenfield.js │ │ │ │ │ │ │ ├── radio.js │ │ │ │ │ │ │ ├── select.js │ │ │ │ │ │ │ ├── textarea.js │ │ │ │ │ │ │ └── textfield.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── horizontalrule │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── htmldataprocessor │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── htmlwriter │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── iframedialog │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── image │ │ │ │ │ │ ├── dialogs │ │ │ │ │ │ │ └── image.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── indent │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── justify │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── keystrokes │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── link │ │ │ │ │ │ ├── dialogs │ │ │ │ │ │ │ ├── anchor.js │ │ │ │ │ │ │ └── link.js │ │ │ │ │ │ ├── images │ │ │ │ │ │ │ └── anchor.gif │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── list │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── listblock │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── maximize │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── menu │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── menubutton │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── newpage │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── pagebreak │ │ │ │ │ │ ├── images │ │ │ │ │ │ │ └── pagebreak.gif │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── panel │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── panelbutton │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── pastefromword │ │ │ │ │ │ ├── dialogs │ │ │ │ │ │ │ └── pastefromword.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── pastetext │ │ │ │ │ │ ├── dialogs │ │ │ │ │ │ │ └── pastetext.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── popup │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── preview │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── print │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── removeformat │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── resize │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── richcombo │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── save │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── scayt │ │ │ │ │ │ ├── dialogs │ │ │ │ │ │ │ ├── options.js │ │ │ │ │ │ │ └── toolbar.css │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── selection │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── showblocks │ │ │ │ │ │ ├── images │ │ │ │ │ │ │ ├── block_address.png │ │ │ │ │ │ │ ├── block_blockquote.png │ │ │ │ │ │ │ ├── block_div.png │ │ │ │ │ │ │ ├── block_h1.png │ │ │ │ │ │ │ ├── block_h2.png │ │ │ │ │ │ │ ├── block_h3.png │ │ │ │ │ │ │ ├── block_h4.png │ │ │ │ │ │ │ ├── block_h5.png │ │ │ │ │ │ │ ├── block_h6.png │ │ │ │ │ │ │ ├── block_p.png │ │ │ │ │ │ │ └── block_pre.png │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── smiley │ │ │ │ │ │ ├── dialogs │ │ │ │ │ │ │ └── smiley.js │ │ │ │ │ │ ├── images │ │ │ │ │ │ │ ├── angel_smile.gif │ │ │ │ │ │ │ ├── angry_smile.gif │ │ │ │ │ │ │ ├── broken_heart.gif │ │ │ │ │ │ │ ├── confused_smile.gif │ │ │ │ │ │ │ ├── cry_smile.gif │ │ │ │ │ │ │ ├── devil_smile.gif │ │ │ │ │ │ │ ├── embaressed_smile.gif │ │ │ │ │ │ │ ├── envelope.gif │ │ │ │ │ │ │ ├── heart.gif │ │ │ │ │ │ │ ├── kiss.gif │ │ │ │ │ │ │ ├── lightbulb.gif │ │ │ │ │ │ │ ├── omg_smile.gif │ │ │ │ │ │ │ ├── regular_smile.gif │ │ │ │ │ │ │ ├── sad_smile.gif │ │ │ │ │ │ │ ├── shades_smile.gif │ │ │ │ │ │ │ ├── teeth_smile.gif │ │ │ │ │ │ │ ├── thumbs_down.gif │ │ │ │ │ │ │ ├── thumbs_up.gif │ │ │ │ │ │ │ ├── tounge_smile.gif │ │ │ │ │ │ │ ├── whatchutalkingabout_smile.gif │ │ │ │ │ │ │ └── wink_smile.gif │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── sourcearea │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── specialchar │ │ │ │ │ │ ├── dialogs │ │ │ │ │ │ │ └── specialchar.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── styles │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── stylescombo │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── styles │ │ │ │ │ │ │ └── default.js │ │ │ │ │ ├── tab │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── table │ │ │ │ │ │ ├── dialogs │ │ │ │ │ │ │ └── table.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── tabletools │ │ │ │ │ │ ├── dialogs │ │ │ │ │ │ │ └── tableCell.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── templates │ │ │ │ │ │ ├── dialogs │ │ │ │ │ │ │ └── templates.js │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ └── templates │ │ │ │ │ │ │ ├── default.js │ │ │ │ │ │ │ └── images │ │ │ │ │ │ │ ├── template1.gif │ │ │ │ │ │ │ ├── template2.gif │ │ │ │ │ │ │ └── template3.gif │ │ │ │ │ ├── toolbar │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── uicolor │ │ │ │ │ │ ├── dialogs │ │ │ │ │ │ │ └── uicolor.js │ │ │ │ │ │ ├── lang │ │ │ │ │ │ │ └── en.js │ │ │ │ │ │ ├── plugin.js │ │ │ │ │ │ ├── uicolor.gif │ │ │ │ │ │ └── yui │ │ │ │ │ │ │ ├── assets │ │ │ │ │ │ │ ├── hue_bg.png │ │ │ │ │ │ │ ├── hue_thumb.png │ │ │ │ │ │ │ ├── picker_mask.png │ │ │ │ │ │ │ ├── picker_thumb.png │ │ │ │ │ │ │ └── yui.css │ │ │ │ │ │ │ └── yui.js │ │ │ │ │ ├── undo │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── wsc │ │ │ │ │ │ ├── dialogs │ │ │ │ │ │ │ ├── ciframe.html │ │ │ │ │ │ │ ├── tmpFrameset.html │ │ │ │ │ │ │ ├── wsc.css │ │ │ │ │ │ │ └── wsc.js │ │ │ │ │ │ └── plugin.js │ │ │ │ │ └── wysiwygarea │ │ │ │ │ │ └── plugin.js │ │ │ │ │ ├── skins │ │ │ │ │ ├── kama │ │ │ │ │ │ ├── dialog.css │ │ │ │ │ │ ├── editor.css │ │ │ │ │ │ ├── icons.png │ │ │ │ │ │ ├── images │ │ │ │ │ │ │ ├── dialog_sides.gif │ │ │ │ │ │ │ ├── dialog_sides.png │ │ │ │ │ │ │ ├── dialog_sides_rtl.png │ │ │ │ │ │ │ ├── mini.gif │ │ │ │ │ │ │ ├── noimage.png │ │ │ │ │ │ │ ├── sprites.png │ │ │ │ │ │ │ ├── sprites_ie6.png │ │ │ │ │ │ │ └── toolbar_start.gif │ │ │ │ │ │ ├── skin.js │ │ │ │ │ │ └── templates.css │ │ │ │ │ ├── office2003 │ │ │ │ │ │ ├── dialog.css │ │ │ │ │ │ ├── editor.css │ │ │ │ │ │ ├── icons.png │ │ │ │ │ │ ├── images │ │ │ │ │ │ │ ├── dialog_sides.gif │ │ │ │ │ │ │ ├── dialog_sides.png │ │ │ │ │ │ │ ├── dialog_sides_rtl.png │ │ │ │ │ │ │ ├── mini.gif │ │ │ │ │ │ │ ├── noimage.png │ │ │ │ │ │ │ ├── sprites.png │ │ │ │ │ │ │ └── sprites_ie6.png │ │ │ │ │ │ ├── skin.js │ │ │ │ │ │ └── templates.css │ │ │ │ │ └── v2 │ │ │ │ │ │ ├── dialog.css │ │ │ │ │ │ ├── editor.css │ │ │ │ │ │ ├── icons.png │ │ │ │ │ │ ├── images │ │ │ │ │ │ ├── dialog_sides.gif │ │ │ │ │ │ ├── dialog_sides.png │ │ │ │ │ │ ├── dialog_sides_rtl.png │ │ │ │ │ │ ├── mini.gif │ │ │ │ │ │ ├── noimage.png │ │ │ │ │ │ ├── sprites.png │ │ │ │ │ │ ├── sprites_ie6.png │ │ │ │ │ │ └── toolbar_start.gif │ │ │ │ │ │ ├── skin.js │ │ │ │ │ │ └── templates.css │ │ │ │ │ └── themes │ │ │ │ │ └── default │ │ │ │ │ └── theme.js │ │ │ └── template_plugins │ │ │ │ ├── __init__.py │ │ │ │ └── ckeditor.py │ │ └── settings.ini │ └── wsgi_handler.wsgi ├── plugs_todo │ ├── _project │ ├── apps │ │ ├── settings.ini │ │ └── todo │ │ │ ├── __init__.py │ │ │ ├── conf.py │ │ │ ├── info.ini │ │ │ ├── models.py │ │ │ ├── settings.ini │ │ │ ├── static │ │ │ └── readme.txt │ │ │ ├── templates │ │ │ ├── base.html │ │ │ └── readme.txt │ │ │ └── views.py │ ├── fcgi_handler.fcgi │ └── wsgi_handler.py ├── simple_todo │ ├── app.yaml │ ├── apps │ │ ├── settings.ini │ │ └── todo │ │ │ ├── __init__.py │ │ │ ├── conf.py │ │ │ ├── info.ini │ │ │ ├── models.py │ │ │ ├── settings.ini │ │ │ ├── static │ │ │ ├── readme.txt │ │ │ └── styles │ │ │ │ ├── index │ │ │ │ ├── images │ │ │ │ │ ├── bg_1.png │ │ │ │ │ ├── email.png │ │ │ │ │ ├── home.png │ │ │ │ │ ├── msn.png │ │ │ │ │ ├── qq.png │ │ │ │ │ └── website.png │ │ │ │ └── style.css │ │ │ │ └── reset.css │ │ │ ├── templates │ │ │ ├── Todo │ │ │ │ ├── edit.html │ │ │ │ └── index.html │ │ │ ├── error.html │ │ │ ├── index.html │ │ │ ├── layout.html │ │ │ └── readme.txt │ │ │ └── views.py │ ├── fcgi_handler.fcgi │ ├── gae_handler.py │ └── wsgi_handler.py ├── soap_test │ ├── apps │ │ ├── settings.ini │ │ └── soap_test │ │ │ ├── __init__.py │ │ │ ├── conf.py │ │ │ ├── info.ini │ │ │ ├── static │ │ │ └── readme.txt │ │ │ ├── templates │ │ │ └── readme.txt │ │ │ └── views.py │ ├── fcgi_handler.fcgi │ ├── test_pys.py │ ├── test_suds.py │ └── wsgi_handler.py ├── upload_demo │ ├── apps │ │ ├── settings.ini │ │ └── test │ │ │ ├── __init__.py │ │ │ ├── conf.py │ │ │ ├── info.ini │ │ │ ├── models.py │ │ │ ├── settings.ini │ │ │ ├── static │ │ │ └── readme.txt │ │ │ ├── templates │ │ │ ├── edit.html │ │ │ ├── error.html │ │ │ ├── index.html │ │ │ ├── list.html │ │ │ ├── readme.txt │ │ │ └── upload.html │ │ │ └── views.py │ ├── fcgi_handler.fcgi │ └── wsgi_handler.py └── xmlrpc_test │ ├── apps │ ├── Hello │ │ ├── __init__.py │ │ ├── conf.py │ │ ├── info.ini │ │ ├── static │ │ │ └── readme.txt │ │ ├── templates │ │ │ └── readme.txt │ │ └── views.py │ └── settings.ini │ ├── fcgi_handler.fcgi │ ├── test_xmlrpc.py │ └── wsgi_handler.py └── uliweb3 ├── .gitignore ├── apijson_todo ├── .gitignore ├── README.md ├── apps │ ├── __init__.py │ ├── settings.ini │ └── todo │ │ ├── README.md │ │ ├── __init__.py │ │ ├── models.py │ │ ├── settings.ini │ │ ├── static │ │ └── readme.txt │ │ ├── templates │ │ ├── base.html │ │ ├── index.html │ │ └── readme.txt │ │ └── views.py ├── database.db ├── doc │ └── readme.txt ├── requirements.txt ├── setup.py └── wsgi_handler.py ├── guestbook ├── .gitignore ├── apps │ ├── GuestBook │ │ ├── __init__.py │ │ ├── forms.py │ │ ├── models.py │ │ ├── settings.ini │ │ ├── static │ │ │ └── delete.gif │ │ ├── templates │ │ │ ├── base.html │ │ │ ├── error.html │ │ │ ├── index.html │ │ │ └── new_comment.html │ │ └── views.py │ ├── ckeditor │ │ ├── __init__.py │ │ ├── conf.py │ │ ├── info.ini │ │ ├── static │ │ │ └── ckeditor │ │ │ │ ├── .htaccess │ │ │ │ ├── CHANGES.html │ │ │ │ ├── LICENSE.html │ │ │ │ ├── ckeditor.js │ │ │ │ ├── ckeditor_basic.js │ │ │ │ ├── config.js │ │ │ │ ├── contents.css │ │ │ │ ├── images │ │ │ │ └── spacer.gif │ │ │ │ ├── lang │ │ │ │ ├── _languages.js │ │ │ │ ├── _translationstatus.txt │ │ │ │ ├── af.js │ │ │ │ ├── ar.js │ │ │ │ ├── bg.js │ │ │ │ ├── bn.js │ │ │ │ ├── bs.js │ │ │ │ ├── ca.js │ │ │ │ ├── cs.js │ │ │ │ ├── da.js │ │ │ │ ├── de.js │ │ │ │ ├── el.js │ │ │ │ ├── en-au.js │ │ │ │ ├── en-ca.js │ │ │ │ ├── en-uk.js │ │ │ │ ├── en.js │ │ │ │ ├── eo.js │ │ │ │ ├── es.js │ │ │ │ ├── et.js │ │ │ │ ├── eu.js │ │ │ │ ├── fa.js │ │ │ │ ├── fi.js │ │ │ │ ├── fo.js │ │ │ │ ├── fr-ca.js │ │ │ │ ├── fr.js │ │ │ │ ├── gl.js │ │ │ │ ├── gu.js │ │ │ │ ├── he.js │ │ │ │ ├── hi.js │ │ │ │ ├── hr.js │ │ │ │ ├── hu.js │ │ │ │ ├── is.js │ │ │ │ ├── it.js │ │ │ │ ├── ja.js │ │ │ │ ├── km.js │ │ │ │ ├── ko.js │ │ │ │ ├── lt.js │ │ │ │ ├── lv.js │ │ │ │ ├── mn.js │ │ │ │ ├── ms.js │ │ │ │ ├── nb.js │ │ │ │ ├── nl.js │ │ │ │ ├── no.js │ │ │ │ ├── pl.js │ │ │ │ ├── pt-br.js │ │ │ │ ├── pt.js │ │ │ │ ├── ro.js │ │ │ │ ├── ru.js │ │ │ │ ├── sk.js │ │ │ │ ├── sl.js │ │ │ │ ├── sr-latn.js │ │ │ │ ├── sr.js │ │ │ │ ├── sv.js │ │ │ │ ├── th.js │ │ │ │ ├── tr.js │ │ │ │ ├── uk.js │ │ │ │ ├── vi.js │ │ │ │ ├── zh-cn.js │ │ │ │ └── zh.js │ │ │ │ ├── plugins │ │ │ │ ├── about │ │ │ │ │ ├── dialogs │ │ │ │ │ │ ├── about.js │ │ │ │ │ │ └── logo_ckeditor.png │ │ │ │ │ └── plugin.js │ │ │ │ ├── basicstyles │ │ │ │ │ └── plugin.js │ │ │ │ ├── blockquote │ │ │ │ │ └── plugin.js │ │ │ │ ├── button │ │ │ │ │ └── plugin.js │ │ │ │ ├── clipboard │ │ │ │ │ ├── dialogs │ │ │ │ │ │ └── paste.js │ │ │ │ │ └── plugin.js │ │ │ │ ├── colorbutton │ │ │ │ │ └── plugin.js │ │ │ │ ├── contextmenu │ │ │ │ │ └── plugin.js │ │ │ │ ├── dialog │ │ │ │ │ ├── dialogDefinition.js │ │ │ │ │ └── plugin.js │ │ │ │ ├── dialogui │ │ │ │ │ └── plugin.js │ │ │ │ ├── domiterator │ │ │ │ │ └── plugin.js │ │ │ │ ├── editingblock │ │ │ │ │ └── plugin.js │ │ │ │ ├── elementspath │ │ │ │ │ └── plugin.js │ │ │ │ ├── enterkey │ │ │ │ │ └── plugin.js │ │ │ │ ├── entities │ │ │ │ │ └── plugin.js │ │ │ │ ├── fakeobjects │ │ │ │ │ └── plugin.js │ │ │ │ ├── filebrowser │ │ │ │ │ └── plugin.js │ │ │ │ ├── find │ │ │ │ │ ├── dialogs │ │ │ │ │ │ └── find.js │ │ │ │ │ └── plugin.js │ │ │ │ ├── flash │ │ │ │ │ ├── dialogs │ │ │ │ │ │ └── flash.js │ │ │ │ │ ├── images │ │ │ │ │ │ └── placeholder.png │ │ │ │ │ └── plugin.js │ │ │ │ ├── floatpanel │ │ │ │ │ └── plugin.js │ │ │ │ ├── font │ │ │ │ │ └── plugin.js │ │ │ │ ├── format │ │ │ │ │ └── plugin.js │ │ │ │ ├── forms │ │ │ │ │ ├── dialogs │ │ │ │ │ │ ├── button.js │ │ │ │ │ │ ├── checkbox.js │ │ │ │ │ │ ├── form.js │ │ │ │ │ │ ├── hiddenfield.js │ │ │ │ │ │ ├── radio.js │ │ │ │ │ │ ├── select.js │ │ │ │ │ │ ├── textarea.js │ │ │ │ │ │ └── textfield.js │ │ │ │ │ └── plugin.js │ │ │ │ ├── horizontalrule │ │ │ │ │ └── plugin.js │ │ │ │ ├── htmldataprocessor │ │ │ │ │ └── plugin.js │ │ │ │ ├── htmlwriter │ │ │ │ │ └── plugin.js │ │ │ │ ├── iframedialog │ │ │ │ │ └── plugin.js │ │ │ │ ├── image │ │ │ │ │ ├── dialogs │ │ │ │ │ │ └── image.js │ │ │ │ │ └── plugin.js │ │ │ │ ├── indent │ │ │ │ │ └── plugin.js │ │ │ │ ├── justify │ │ │ │ │ └── plugin.js │ │ │ │ ├── keystrokes │ │ │ │ │ └── plugin.js │ │ │ │ ├── link │ │ │ │ │ ├── dialogs │ │ │ │ │ │ ├── anchor.js │ │ │ │ │ │ └── link.js │ │ │ │ │ ├── images │ │ │ │ │ │ └── anchor.gif │ │ │ │ │ └── plugin.js │ │ │ │ ├── list │ │ │ │ │ └── plugin.js │ │ │ │ ├── listblock │ │ │ │ │ └── plugin.js │ │ │ │ ├── maximize │ │ │ │ │ └── plugin.js │ │ │ │ ├── menu │ │ │ │ │ └── plugin.js │ │ │ │ ├── menubutton │ │ │ │ │ └── plugin.js │ │ │ │ ├── newpage │ │ │ │ │ └── plugin.js │ │ │ │ ├── pagebreak │ │ │ │ │ ├── images │ │ │ │ │ │ └── pagebreak.gif │ │ │ │ │ └── plugin.js │ │ │ │ ├── panel │ │ │ │ │ └── plugin.js │ │ │ │ ├── panelbutton │ │ │ │ │ └── plugin.js │ │ │ │ ├── pastefromword │ │ │ │ │ ├── dialogs │ │ │ │ │ │ └── pastefromword.js │ │ │ │ │ └── plugin.js │ │ │ │ ├── pastetext │ │ │ │ │ ├── dialogs │ │ │ │ │ │ └── pastetext.js │ │ │ │ │ └── plugin.js │ │ │ │ ├── popup │ │ │ │ │ └── plugin.js │ │ │ │ ├── preview │ │ │ │ │ └── plugin.js │ │ │ │ ├── print │ │ │ │ │ └── plugin.js │ │ │ │ ├── removeformat │ │ │ │ │ └── plugin.js │ │ │ │ ├── resize │ │ │ │ │ └── plugin.js │ │ │ │ ├── richcombo │ │ │ │ │ └── plugin.js │ │ │ │ ├── save │ │ │ │ │ └── plugin.js │ │ │ │ ├── scayt │ │ │ │ │ ├── dialogs │ │ │ │ │ │ ├── options.js │ │ │ │ │ │ └── toolbar.css │ │ │ │ │ └── plugin.js │ │ │ │ ├── selection │ │ │ │ │ └── plugin.js │ │ │ │ ├── showblocks │ │ │ │ │ ├── images │ │ │ │ │ │ ├── block_address.png │ │ │ │ │ │ ├── block_blockquote.png │ │ │ │ │ │ ├── block_div.png │ │ │ │ │ │ ├── block_h1.png │ │ │ │ │ │ ├── block_h2.png │ │ │ │ │ │ ├── block_h3.png │ │ │ │ │ │ ├── block_h4.png │ │ │ │ │ │ ├── block_h5.png │ │ │ │ │ │ ├── block_h6.png │ │ │ │ │ │ ├── block_p.png │ │ │ │ │ │ └── block_pre.png │ │ │ │ │ └── plugin.js │ │ │ │ ├── smiley │ │ │ │ │ ├── dialogs │ │ │ │ │ │ └── smiley.js │ │ │ │ │ ├── images │ │ │ │ │ │ ├── angel_smile.gif │ │ │ │ │ │ ├── angry_smile.gif │ │ │ │ │ │ ├── broken_heart.gif │ │ │ │ │ │ ├── confused_smile.gif │ │ │ │ │ │ ├── cry_smile.gif │ │ │ │ │ │ ├── devil_smile.gif │ │ │ │ │ │ ├── embaressed_smile.gif │ │ │ │ │ │ ├── envelope.gif │ │ │ │ │ │ ├── heart.gif │ │ │ │ │ │ ├── kiss.gif │ │ │ │ │ │ ├── lightbulb.gif │ │ │ │ │ │ ├── omg_smile.gif │ │ │ │ │ │ ├── regular_smile.gif │ │ │ │ │ │ ├── sad_smile.gif │ │ │ │ │ │ ├── shades_smile.gif │ │ │ │ │ │ ├── teeth_smile.gif │ │ │ │ │ │ ├── thumbs_down.gif │ │ │ │ │ │ ├── thumbs_up.gif │ │ │ │ │ │ ├── tounge_smile.gif │ │ │ │ │ │ ├── whatchutalkingabout_smile.gif │ │ │ │ │ │ └── wink_smile.gif │ │ │ │ │ └── plugin.js │ │ │ │ ├── sourcearea │ │ │ │ │ └── plugin.js │ │ │ │ ├── specialchar │ │ │ │ │ ├── dialogs │ │ │ │ │ │ └── specialchar.js │ │ │ │ │ └── plugin.js │ │ │ │ ├── styles │ │ │ │ │ └── plugin.js │ │ │ │ ├── stylescombo │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── styles │ │ │ │ │ │ └── default.js │ │ │ │ ├── tab │ │ │ │ │ └── plugin.js │ │ │ │ ├── table │ │ │ │ │ ├── dialogs │ │ │ │ │ │ └── table.js │ │ │ │ │ └── plugin.js │ │ │ │ ├── tabletools │ │ │ │ │ ├── dialogs │ │ │ │ │ │ └── tableCell.js │ │ │ │ │ └── plugin.js │ │ │ │ ├── templates │ │ │ │ │ ├── dialogs │ │ │ │ │ │ └── templates.js │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── templates │ │ │ │ │ │ ├── default.js │ │ │ │ │ │ └── images │ │ │ │ │ │ ├── template1.gif │ │ │ │ │ │ ├── template2.gif │ │ │ │ │ │ └── template3.gif │ │ │ │ ├── toolbar │ │ │ │ │ └── plugin.js │ │ │ │ ├── uicolor │ │ │ │ │ ├── dialogs │ │ │ │ │ │ └── uicolor.js │ │ │ │ │ ├── lang │ │ │ │ │ │ └── en.js │ │ │ │ │ ├── plugin.js │ │ │ │ │ ├── uicolor.gif │ │ │ │ │ └── yui │ │ │ │ │ │ ├── assets │ │ │ │ │ │ ├── hue_bg.png │ │ │ │ │ │ ├── hue_thumb.png │ │ │ │ │ │ ├── picker_mask.png │ │ │ │ │ │ ├── picker_thumb.png │ │ │ │ │ │ └── yui.css │ │ │ │ │ │ └── yui.js │ │ │ │ ├── undo │ │ │ │ │ └── plugin.js │ │ │ │ ├── wsc │ │ │ │ │ ├── dialogs │ │ │ │ │ │ ├── ciframe.html │ │ │ │ │ │ ├── tmpFrameset.html │ │ │ │ │ │ ├── wsc.css │ │ │ │ │ │ └── wsc.js │ │ │ │ │ └── plugin.js │ │ │ │ └── wysiwygarea │ │ │ │ │ └── plugin.js │ │ │ │ ├── skins │ │ │ │ ├── kama │ │ │ │ │ ├── dialog.css │ │ │ │ │ ├── editor.css │ │ │ │ │ ├── icons.png │ │ │ │ │ ├── images │ │ │ │ │ │ ├── dialog_sides.gif │ │ │ │ │ │ ├── dialog_sides.png │ │ │ │ │ │ ├── dialog_sides_rtl.png │ │ │ │ │ │ ├── mini.gif │ │ │ │ │ │ ├── noimage.png │ │ │ │ │ │ ├── sprites.png │ │ │ │ │ │ ├── sprites_ie6.png │ │ │ │ │ │ └── toolbar_start.gif │ │ │ │ │ ├── skin.js │ │ │ │ │ └── templates.css │ │ │ │ ├── office2003 │ │ │ │ │ ├── dialog.css │ │ │ │ │ ├── editor.css │ │ │ │ │ ├── icons.png │ │ │ │ │ ├── images │ │ │ │ │ │ ├── dialog_sides.gif │ │ │ │ │ │ ├── dialog_sides.png │ │ │ │ │ │ ├── dialog_sides_rtl.png │ │ │ │ │ │ ├── mini.gif │ │ │ │ │ │ ├── noimage.png │ │ │ │ │ │ ├── sprites.png │ │ │ │ │ │ └── sprites_ie6.png │ │ │ │ │ ├── skin.js │ │ │ │ │ └── templates.css │ │ │ │ └── v2 │ │ │ │ │ ├── dialog.css │ │ │ │ │ ├── editor.css │ │ │ │ │ ├── icons.png │ │ │ │ │ ├── images │ │ │ │ │ ├── dialog_sides.gif │ │ │ │ │ ├── dialog_sides.png │ │ │ │ │ ├── dialog_sides_rtl.png │ │ │ │ │ ├── mini.gif │ │ │ │ │ ├── noimage.png │ │ │ │ │ ├── sprites.png │ │ │ │ │ ├── sprites_ie6.png │ │ │ │ │ └── toolbar_start.gif │ │ │ │ │ ├── skin.js │ │ │ │ │ └── templates.css │ │ │ │ └── themes │ │ │ │ └── default │ │ │ │ └── theme.js │ │ └── template_plugins │ │ │ ├── __init__.py │ │ │ └── ckeditor.py │ └── settings.ini └── wsgi_handler.wsgi ├── hello ├── .gitignore ├── README.md ├── apps │ ├── Hello │ │ ├── README.md │ │ ├── __init__.py │ │ ├── static │ │ │ └── readme.txt │ │ ├── templates │ │ │ ├── readme.txt │ │ │ ├── template.html │ │ │ └── template1.html │ │ └── views.py │ ├── __init__.py │ └── settings.ini ├── doc │ └── readme.txt ├── requirements.txt ├── setup.py └── wsgi_handler.py ├── simple_todo ├── .gitignore ├── app.yaml ├── apps │ ├── settings.ini │ └── todo │ │ ├── __init__.py │ │ ├── conf.py │ │ ├── info.ini │ │ ├── models.py │ │ ├── settings.ini │ │ ├── static │ │ ├── readme.txt │ │ └── styles │ │ │ ├── index │ │ │ ├── images │ │ │ │ ├── bg_1.png │ │ │ │ ├── email.png │ │ │ │ ├── home.png │ │ │ │ ├── msn.png │ │ │ │ ├── qq.png │ │ │ │ └── website.png │ │ │ └── style.css │ │ │ └── reset.css │ │ ├── templates │ │ ├── Todo │ │ │ ├── edit.html │ │ │ └── index.html │ │ ├── error.html │ │ ├── index.html │ │ ├── layout.html │ │ └── readme.txt │ │ └── views.py ├── fcgi_handler.fcgi ├── gae_handler.py └── wsgi_handler.py └── upload_demo ├── apps ├── settings.ini └── test │ ├── __init__.py │ ├── conf.py │ ├── info.ini │ ├── models.py │ ├── settings.ini │ ├── static │ └── readme.txt │ ├── templates │ ├── edit.html │ ├── error.html │ ├── index.html │ ├── list.html │ ├── readme.txt │ └── upload.html │ └── views.py ├── fcgi_handler.fcgi └── wsgi_handler.py /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | *.bak 3 | .idea -------------------------------------------------------------------------------- /_project: -------------------------------------------------------------------------------- 1 | [default] 2 | projectname = Markdown,python, 3 | 4 | [acp] 5 | .md = md.acp, 6 | 7 | [highlight] 8 | .md = md 9 | 10 | -------------------------------------------------------------------------------- /docs/en/_static/bae1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/limodou/uliweb-doc/276db79d9a70517d7321bbecb6e02c882ee6af3d/docs/en/_static/bae1.png -------------------------------------------------------------------------------- /docs/en/_static/bae2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/limodou/uliweb-doc/276db79d9a70517d7321bbecb6e02c882ee6af3d/docs/en/_static/bae2.png -------------------------------------------------------------------------------- /docs/en/_static/bae3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/limodou/uliweb-doc/276db79d9a70517d7321bbecb6e02c882ee6af3d/docs/en/_static/bae3.png -------------------------------------------------------------------------------- /docs/en/_static/bae4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/limodou/uliweb-doc/276db79d9a70517d7321bbecb6e02c882ee6af3d/docs/en/_static/bae4.png -------------------------------------------------------------------------------- /docs/en/_static/bae5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/limodou/uliweb-doc/276db79d9a70517d7321bbecb6e02c882ee6af3d/docs/en/_static/bae5.png -------------------------------------------------------------------------------- /docs/en/_static/bae6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/limodou/uliweb-doc/276db79d9a70517d7321bbecb6e02c882ee6af3d/docs/en/_static/bae6.png -------------------------------------------------------------------------------- /docs/en/_static/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/limodou/uliweb-doc/276db79d9a70517d7321bbecb6e02c882ee6af3d/docs/en/_static/error.png -------------------------------------------------------------------------------- /docs/en/_static/first.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/limodou/uliweb-doc/276db79d9a70517d7321bbecb6e02c882ee6af3d/docs/en/_static/first.png -------------------------------------------------------------------------------- /docs/en/_static/gevent_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/limodou/uliweb-doc/276db79d9a70517d7321bbecb6e02c882ee6af3d/docs/en/_static/gevent_01.png -------------------------------------------------------------------------------- /docs/en/_static/heroku1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/limodou/uliweb-doc/276db79d9a70517d7321bbecb6e02c882ee6af3d/docs/en/_static/heroku1.png -------------------------------------------------------------------------------- /docs/en/_static/heroku2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/limodou/uliweb-doc/276db79d9a70517d7321bbecb6e02c882ee6af3d/docs/en/_static/heroku2.png -------------------------------------------------------------------------------- /docs/en/_static/heroku3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/limodou/uliweb-doc/276db79d9a70517d7321bbecb6e02c882ee6af3d/docs/en/_static/heroku3.png -------------------------------------------------------------------------------- /docs/en/_static/menus_app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/limodou/uliweb-doc/276db79d9a70517d7321bbecb6e02c882ee6af3d/docs/en/_static/menus_app.png -------------------------------------------------------------------------------- /docs/en/_static/new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/limodou/uliweb-doc/276db79d9a70517d7321bbecb6e02c882ee6af3d/docs/en/_static/new.png -------------------------------------------------------------------------------- /docs/en/_static/plugs_todo_first.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/limodou/uliweb-doc/276db79d9a70517d7321bbecb6e02c882ee6af3d/docs/en/_static/plugs_todo_first.png -------------------------------------------------------------------------------- /docs/en/_static/plugs_todo_index.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/limodou/uliweb-doc/276db79d9a70517d7321bbecb6e02c882ee6af3d/docs/en/_static/plugs_todo_index.png -------------------------------------------------------------------------------- /docs/en/_static/uliweb_media.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/limodou/uliweb-doc/276db79d9a70517d7321bbecb6e02c882ee6af3d/docs/en/_static/uliweb_media.png -------------------------------------------------------------------------------- /docs/en/_static/uliweb_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/limodou/uliweb-doc/276db79d9a70517d7321bbecb6e02c882ee6af3d/docs/en/_static/uliweb_small.png -------------------------------------------------------------------------------- /docs/en/_static/upload_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/limodou/uliweb-doc/276db79d9a70517d7321bbecb6e02c882ee6af3d/docs/en/_static/upload_01.png -------------------------------------------------------------------------------- /docs/en/_static/view_index.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/limodou/uliweb-doc/276db79d9a70517d7321bbecb6e02c882ee6af3d/docs/en/_static/view_index.png -------------------------------------------------------------------------------- /docs/en/exclude.txt: -------------------------------------------------------------------------------- 1 | conf.py 2 | templates 3 | .git 4 | .svn 5 | _svn 6 | *.pyc 7 | *.bak 8 | *.txt 9 | make.bat 10 | .DS_Store -------------------------------------------------------------------------------- /docs/en/i18n.md: -------------------------------------------------------------------------------- 1 | # I18N Process 2 | 3 | -------------------------------------------------------------------------------- /docs/en/index.md: -------------------------------------------------------------------------------- 1 | ## Introduction 2 | 3 | {% toc max_depth=1 %} 4 | introduction.md 5 | architecture.md 6 | update.md 7 | {% endtoc %} 8 | 9 | ## Tutorials 10 | 11 | {% toc max_depth=1 %} 12 | hello_uliweb.md 13 | guestbook.md 14 | {% endtoc %} 15 | 16 | ## Technique Docs 17 | 18 | {% toc max_depth=1 %} 19 | installation.md 20 | url_mapping.md 21 | template.md 22 | manage_guide.md 23 | orm.md 24 | form.md 25 | extending.md 26 | deployment.md 27 | globals.md 28 | {% endtoc %} 29 | 30 | -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |
6 | 'plugs.ui.jquery.jqutils'
7 |
8 |
9 | 然后在template里加上
10 |
11 |
12 | {{use "jqcookie"}}
13 |
14 |
15 | 这样就能在生成的html里加上相关的js文件
16 |
17 | 使用方面请参考 https://github.com/js-cookie/js-cookie#basic-usage
18 |
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb/articles/nginx_cfg.md:
--------------------------------------------------------------------------------
1 | # Nginx配置例子
2 |
3 | ## 反代例子
4 | ```
5 | server {
6 | listen 80;
7 | server_name xxx;
8 | location / {
9 | proxy_pass http://localhost:3000/;
10 | proxy_set_header X-Forwarded-Host $host;
11 | proxy_set_header X-Forwarded-Server $host;
12 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
13 | }
14 | #static files
15 | location ~ ^/static/ {
16 | root /home/xxx/xxx/export/;
17 | }
18 | #favicon
19 | location = /favicon.ico {
20 | alias /home/xxx/xxx/favicon.ico;
21 | }
22 | }
23 | ```
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb/articles/sqlite_timeout.md:
--------------------------------------------------------------------------------
1 | # uliweb里sqlite的timeout参数
2 |
3 | (整理自[google groups相关讨论](https://groups.google.com/d/topic/uliweb/cv8J3T1_EH8/discussion))
4 |
5 | 本来uliorm里是支持CONNECTION_ARGS参数的,那么应该要能这么用:
6 | (加timeout参数的原因可以参考[这里](http://stackoverflow.com/questions/15065037/how-to-increase-connection-timeout-using-sqlalchemy-with-sqlite-in-python))
7 |
8 | ```
9 | [ORM]
10 | CONNECTIONS = {
11 | 'default':{
12 | 'CONNECTION':'sqlite:///database.db',
13 | 'CONNECTION_ARGS':{'timeout': 8.0},
14 | 'CONNECTION_TYPE':'short',
15 | }
16 | }
17 | ```
18 |
19 | 但是因为sqlalchemy的实现,在数据库引擎为sqlite的时候不支持这么用,而是在数据库url里给出,例子:
20 |
21 | ```
22 | [ORM]
23 | CONNECTIONS = {
24 | 'default':{
25 | 'CONNECTION':'sqlite:///database.db?timeout=8.0',
26 | 'CONNECTION_TYPE':'short',
27 | }
28 | }
29 | ```
30 |
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb/articles/url_prefix.md:
--------------------------------------------------------------------------------
1 | # 站点的url前缀配置例子
2 |
3 | local_settings.ini例子:
4 |
5 | ```
6 | [DOMAINS]
7 | default = {'url_prefix': '/myprefix', 'domain': '', 'display': False}
8 | static = {'url_prefix': '/myprefix', 'domain': '', 'display': False}
9 | ```
10 |
11 | 这样就可以对所有views及静态文件的url加上前缀,原来 http://mysite/test 会变成 http://mysite/myprefix/test
12 |
13 | 同时web服务器的配置也需要加上前缀,以 nginx 为例:
14 |
15 | ```
16 | server {
17 | listen 80;
18 | server_name example.com;
19 | location /myprefix/ {
20 | proxy_pass http://localhost:8000/myprefix/;
21 | ...
22 | }
23 | }
24 | ```
25 |
26 | 最后还有一个如果需要加 url prefix ,那么代码(python/html/javascript)里不能把 url 写死,应该用 [url_for](http://limodou.github.io/uliweb-doc/zh_CN/url_mapping.html#title_1-3) 或者 [url_for_static](http://limodou.github.io/uliweb-doc/zh_CN/app_staticfiles.html#title_1-1),比如在html里可以这么用url_for:
27 |
28 | ```
29 | {{=url_for('Test.views.index')}}
30 | ```
31 |
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb/articles/what_does_model_init_does.md:
--------------------------------------------------------------------------------
1 | 导入一个Model时都做了些什么?
2 | ===============================
3 |
4 | 当使用get_model(model_name, engine_name=None)时,都做了哪些事呢?
5 |
6 | 1. 从engine中的models属性里,查找model_name,找到后,如果model_path为字符串,则
7 | 开始导入对应的模块
8 | 2. 导入模块,则开始对Model类进行初始化
9 | 1. 创建Property对象,对于Reference等会对引用的Model执行get_model,所以这里可能循环
10 | 2. 执行Model元类初始化,执行 `__property_config__` 方法
11 | 3. 对类执行bind操作,关联metadata
12 | 1. 根据所有Property来创建Column,执行Property的create方法
13 | 2. 创建Table对象
14 | 3. 处理Model的OnInit方法,如进行索引的处理
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb/blogs/blog_add.md:
--------------------------------------------------------------------------------
1 | # 添加博客
2 |
3 | 因为现在数据库中还不存在数据,所以让我们先创建添加功能,这样有了数据,就可以实现Blog的展示了。
4 |
5 | 添加功能可以算做是管理功能,在教程后面,我们将实现统一的管理界面。在本章节,我将创建一个管理的View。
6 |
7 | ## 创建 views_admin.py
8 |
9 | 在 `apps/blog` 目录下面创建 `views_admin.py` 文件,输入以下内容:
10 |
11 |
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb/blogs/codes/01/admin_layout.css:
--------------------------------------------------------------------------------
1 | html, body {margin:0;background-color:white;padding:0;height:100%;}
2 | .head {background-color:#00B5AD;color:white;margin:0em;padding:4px;}
3 | .container {margin-left:210px;position:relative;min-height:100%;background-color:white;}
4 | .side-menu {position:absolute; top: 5px; left:-205px;width:210px;}
5 | .content {padding:10px;}
6 | .content .grid {margin-left:0;margin-right:0;}
7 | .mmGrid table {font-size:14px;}
8 | .mmPaginator {font-size:14px;}
9 | .mmGrid .mmg-backboard label {font-size:14px;width:120px;}
10 | .ui.secondary.inverted.menu .active.item {
11 | background-color: rgba(255, 255, 255, 0.3);
12 | }
13 | .ui.form span.field_required {font-weight:bold;color:red;font-size:1.5em;}
14 | .ui-pnotify-text {font-size:0.6em;}
15 |
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb/common_apis.md:
--------------------------------------------------------------------------------
1 | # 常用API
2 |
3 | ## manage.py
4 |
5 | ### make_simple_application
6 |
7 | 用于创建application实例。
8 |
9 | ```
10 | def make_simple_application(apps_dir='apps', project_dir=None, include_apps=None,
11 | settings_file='', local_settings_file='',
12 | default_settings=None, dispatcher_cls=None, dispatcher_kwargs=None, reuse=True,
13 | pythonpath=None):
14 | ```
15 |
16 | default_settings --
17 | 用于覆盖缺省的配置信息。格式为 `section/key`, 如 `PARA/test`.
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb/debug_with_pycharm.md:
--------------------------------------------------------------------------------
1 | # 使用PyCharm进行调试
2 |
3 | Uliweb可以使用象PyCharm进行程序调试,下面讲一下大概的设置方式。
4 |
5 | ## 创建调试配置
6 |
7 | 在PyCharm右上角可以切换运行的配置, 点击后可以看到:
8 |
9 | 
10 |
11 | 选择第一项 `Edit Configuration...`, 然后进入:
12 |
13 | 
14 |
15 | 先点击左上角添加一个配置项。
16 |
17 | 然后在 `Script` 处填上 Uliweb 安装目录下的 `__main__.py` 文件, 这个可以作为启动文件。
18 |
19 | 接着在 `Script Parameters` 处输入将要使用的命令行, 如 `runserver` 。这里还可以指定象 `-p` 之类
20 | 的端口号参数。
21 |
22 | 然后在 `Working Directory` 处填入你的项目目录。
23 |
24 | 这样环境就创建好了。
25 |
26 | ## 调试
27 |
28 | 在需要时,点击环境选项右侧的 Bug 按钮,就可以进入调试环境了。
29 |
30 | 
31 |
32 | 调试窗口一般在下面, 最左侧是用来控制继续运行,停止等的按钮。上面是 Step Over, Step Into, Step Out之类的按钮。
33 |
34 | 它有两个Tab窗口, Debugger用来查看运行变量, 调用栈。 Console是输出控制台。
35 |
36 | 
37 |
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb/exclude.txt:
--------------------------------------------------------------------------------
1 | conf.py
2 | templates
3 | .git
4 | .svn
5 | _svn
6 | *.pyc
7 | *.bak
8 | *.txt
9 | make.bat
10 | .DS_Store
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb/installation.md:
--------------------------------------------------------------------------------
1 | # 安装说明
2 |
3 |
4 | ## 要求
5 |
6 |
7 | * Python 2.6+ 目前不支持3.X
8 | * setuptools 0.6c11+
9 |
10 |
11 | ## 额外要求
12 |
13 |
14 | * SQLAlchemy 0.6+ (如果使用Uliweb ORM需要安装它)
15 |
16 | 最简单的方法是使用easy_install或pip,如:
17 |
18 |
19 | ```
20 | easy_install Uliweb
21 | pip install Uliweb
22 | ```
23 |
24 | 另外如果你想跟踪最新的代码,可以使用git来下载代码,
25 |
26 | ```
27 | git clone git://github.com/limodou/uliweb.git
28 | cd uliweb
29 | python setup.py develop
30 | ```
31 |
32 | 使用develop安装只会在Python/site-packages下建一个链接,并不会真正安装,好处就是更新方便。
33 | 不过,当Uliweb的版本升级了,还是要再执行一下安装过程的。
34 |
35 | 当然你也可以直接通过 install 来安装。
36 |
37 |
38 | ```
39 | python setup.py install
40 | ```
41 |
42 |
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb/plugs/apps.md:
--------------------------------------------------------------------------------
1 | # Plugs App 清单
2 |
3 |
4 | ## plugs.ui
5 |
6 | ### plugs.ui.jquery.jqdropdown
7 |
8 | 用来实现类似于bootstrap dropdown的jquery插件。
9 |
10 | * https://github.com/claviska/jquery-dropdown
11 |
12 |
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb/uliweb_ui/apis.md:
--------------------------------------------------------------------------------
1 | # APIs
2 |
3 | Uliweb-UI 提供了常用的一些js的API,分别描述如下:
4 |
5 | ## load
6 |
7 | ```
8 | load('module', callback)
9 | load(['module', ...], callback)
10 |
11 | function callback () {...}
12 | ```
13 |
14 | load 用来实现动态装入某个ui的组件,其中第一个参数可以是一个组件名或组件数组,它也可以是一个真正的URL.为了方便
15 | 使用,Uliweb-UI将常用的组件定义在了 settings.ini 中, 采用 `TEMPLATE_USE` 的定义方式.这种定义方式可以在
16 | 模板中使用 `{{use "name"}}`, 但是不能直接用在 `load` 中,因此需要使用 `uliweb jsmodule -a uliweb_ui`
17 | 来生成一个叫 `jsmodules.js` 的文件,并且放在 `uliweb_ui/static/jsmodules.js` 下. 使用 `jsmodule`
18 | 命令时,需要在某个项目目录下运行,不能直接运行.
19 |
20 | 通常在 Uliweb-UI 中定义的 module 命令都是以 `ui.` 开始,具体有哪些可以使用的组件,可以查看
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb/uliweb_ui/rgrid.md:
--------------------------------------------------------------------------------
1 | # rgrid
2 |
3 | ## 按钮
4 |
5 | ### 按钮属性
6 |
7 | lable --
8 | 按钮名称
9 | url --
10 | 按钮链接,如果没有定义 `onClick` 事件回调, 则点击按钮后会直接跳转
11 | class --
12 | 按钮的样式, 按 bootstrap 或 AdminLTE 的风格
13 | onClick --
14 | 点击事件回调
15 | icon --
16 | 按钮图标
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb/update/update_0.1.5.md:
--------------------------------------------------------------------------------
1 | # 0.1.5
2 |
3 |
4 | 更新内容
5 |
6 |
7 | * 修改cache设置,移除file_dir和lock_dir
8 | * 添加更多的dispatch调用异常输出信息
9 | * 添加uliweb.contrib.form app,添加get_form函数
10 | * 修改auth支持get_form功能
11 | * 改进file_storage过程。
12 | * 修正RedirectException显示bug。
13 | * 添加TablenameConvert到uliweb.orm中,通过orm.set_tablename_converter(converter)传递函数,或者在settings.ini中定义,如:
14 |
15 | > [ORM]
16 | > TABLENAME_CONVERTER = 'uliweb.utils.common.camel_to_'
17 | 当Model名字是CamelCase时,将转化为camel_case
18 | * 添加Reference,OneToOne,ManyToMany关系到Model层级
19 | * 如果collection_name为None,并且tablename_set已存在,将自动创建新的collection_name,因此collection_name将会被会复制,如果传递了collection_name,并且tablename_set已经存在,将抛出异常,请注意其中的差别。
20 | * 修改默认CHAR, str, unicode的max_length为255,之前默认为30.
21 | * 在validator.py添加IS_LENGTH_LESSTHAN和IS_LENGTH_BETWEEN。
22 | * 添加[GLOBAL_OBJECTS]机制,此处的对象配置将被注入到uliweb中。
23 | * 在uliweb中添加validator,使用[VALIDATORS]机制
24 | * 在generic.py中添加IS_LENGTH_LESSTHAN,如果max_length存在。
25 |
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb/update/update_0.2.1.md:
--------------------------------------------------------------------------------
1 | # 0.2.1
2 |
3 | * 添加 `uliweb.utils.timeit` 模块,用户可以使用 `with timeit(prompt):` 来计算下面
4 | 代码的执行时间
5 | * 修改 `file_serving()` 处理的 `action` 缺省值为 `None`. 这样缺省的 `/uploads` 文件
6 | 服务不再是默认为下载。
7 | * 修复ORM的Reference的validate问题。它影响Reference的默认缺省值。
8 |
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb/update/update_0.2.3.md:
--------------------------------------------------------------------------------
1 | # 0.2.3
2 |
3 | * 更新nginx配置文件的输出模板,添加 proxy_set_header 指令
4 | * 向 ORM 添加 save_file() 方法,你可以用它保存select之后的结果集到一个csv文件中
5 | * 修复 SortedDict 类中丢失的 clear() 方法
6 | * 修改i18n处理,对于项目和apps方式的抽取,它将首先启动应用,这样是为了让自定义tag可以起作用。但是建议用户尽量不用自定义tag,因为模板中可以直接写python代码。
7 | * 向utils/common.py中添加walk_dirs()方法,这个函数可以用来遍历目录,同时可以支持对文件名和后缀的过滤功能。
8 |
9 |
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb/update/update_0.2.6.md:
--------------------------------------------------------------------------------
1 | # 0.2.6
2 |
3 | * 増加在定义关系字段时,当引用Model不是字符串而是Model类时发出警告的提示。需
4 | 使用字符串名称。
5 | * 修复在 ListView 和 SelectListView 中对 `manual` 和 `total` 处理的Bug。
6 | * 修复 `rawsql` bug。
7 | * 向 Generic ListView 中増加使用 `get_object` 的调用,使用缓存机制来处理引用对象。
8 | * 修复 `get_cached()` Bug。
9 | * 修复在 Generic 中 AddView 和 EditView 中处理 `process_files()` 的Bug。
10 | * 在进入 Shell 环境前増加对调用 `readline` 的支持。
11 | * 将乐观锁相关的参数由 `occ` 改为 `version` 。
12 | * 修复 ManyToMany 缓存值在保存时没有正确使用的Bug(由于没有存入 `_old_values` )。
13 | * 当在 Model 中定义了主键时,将不再自动创建 `id` 字段,如:
14 |
15 | ```
16 | user_id = Field(int, primary_key=True, autoincrement=True)
17 | ```
18 |
19 | * 修复 `sqldot` 命令在处理 settings.ini 中定义的 Model 名称与 `__tablename__` 不一致
20 | 时的Bug。
21 | * 优化 `sqlhtml` 文档输出,増加 Model 描述及索引的输出。
22 | * 将 `runserver` 的日志输出改为缺省是彩色输出,可以使用 `--nocolor` 关闭。
23 |
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb/update/update_0.3.1.md:
--------------------------------------------------------------------------------
1 | # 0.3.1 2014-07-04
2 |
3 | ## 问题修复
4 |
5 | * 修复 `include` 在 ini 中的bug
6 | * 修复在 orm.get() 中的condition判断bug
7 | * 修复 recorder bug
8 |
9 | ## 功能优化
10 |
11 | * 增加 qqmail 邮件服务后端支持,感谢 Yubin Wang
6 | 'plugs.ui.jquery.jqutils'
7 |
8 |
9 | 然后在template里加上
10 |
11 |
12 | {{use "jqcookie"}}
13 |
14 |
15 | 这样就能在生成的html里加上相关的js文件
16 |
17 | 使用方面请参考 https://github.com/js-cookie/js-cookie#basic-usage
18 |
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb3/articles/nginx_cfg.md:
--------------------------------------------------------------------------------
1 | # Nginx配置例子
2 |
3 | ## 反代例子
4 | ```
5 | server {
6 | listen 80;
7 | server_name xxx;
8 | location / {
9 | proxy_pass http://localhost:3000/;
10 | proxy_set_header X-Forwarded-Host $host;
11 | proxy_set_header X-Forwarded-Server $host;
12 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
13 | }
14 | #static files
15 | location ~ ^/static/ {
16 | root /home/xxx/xxx/export/;
17 | }
18 | #favicon
19 | location = /favicon.ico {
20 | alias /home/xxx/xxx/favicon.ico;
21 | }
22 | }
23 | ```
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb3/articles/sqlite_timeout.md:
--------------------------------------------------------------------------------
1 | # uliweb里sqlite的timeout参数
2 |
3 | (整理自[google groups相关讨论](https://groups.google.com/d/topic/uliweb/cv8J3T1_EH8/discussion))
4 |
5 | 本来uliorm里是支持CONNECTION_ARGS参数的,那么应该要能这么用:
6 | (加timeout参数的原因可以参考[这里](http://stackoverflow.com/questions/15065037/how-to-increase-connection-timeout-using-sqlalchemy-with-sqlite-in-python))
7 |
8 | ```
9 | [ORM]
10 | CONNECTIONS = {
11 | 'default':{
12 | 'CONNECTION':'sqlite:///database.db',
13 | 'CONNECTION_ARGS':{'timeout': 8.0},
14 | 'CONNECTION_TYPE':'short',
15 | }
16 | }
17 | ```
18 |
19 | 但是因为sqlalchemy的实现,在数据库引擎为sqlite的时候不支持这么用,而是在数据库url里给出,例子:
20 |
21 | ```
22 | [ORM]
23 | CONNECTIONS = {
24 | 'default':{
25 | 'CONNECTION':'sqlite:///database.db?timeout=8.0',
26 | 'CONNECTION_TYPE':'short',
27 | }
28 | }
29 | ```
30 |
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb3/articles/url_prefix.md:
--------------------------------------------------------------------------------
1 | # 站点的url前缀配置例子
2 |
3 | local_settings.ini例子:
4 |
5 | ```
6 | [DOMAINS]
7 | default = {'url_prefix': '/myprefix', 'domain': '', 'display': False}
8 | static = {'url_prefix': '/myprefix', 'domain': '', 'display': False}
9 | ```
10 |
11 | 这样就可以对所有views及静态文件的url加上前缀,原来 http://mysite/test 会变成 http://mysite/myprefix/test
12 |
13 | 同时web服务器的配置也需要加上前缀,以 nginx 为例:
14 |
15 | ```
16 | server {
17 | listen 80;
18 | server_name example.com;
19 | location /myprefix/ {
20 | proxy_pass http://localhost:8000/myprefix/;
21 | ...
22 | }
23 | }
24 | ```
25 |
26 | 最后还有一个如果需要加 url prefix ,那么代码(python/html/javascript)里不能把 url 写死,应该用 [url_for](http://limodou.github.io/uliweb-doc/zh_CN/url_mapping.html#title_1-3) 或者 [url_for_static](http://limodou.github.io/uliweb-doc/zh_CN/app_staticfiles.html#title_1-1),比如在html里可以这么用url_for:
27 |
28 | ```
29 | {{=url_for('Test.views.index')}}
30 | ```
31 |
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb3/articles/what_does_model_init_does.md:
--------------------------------------------------------------------------------
1 | 导入一个Model时都做了些什么?
2 | ===============================
3 |
4 | 当使用get_model(model_name, engine_name=None)时,都做了哪些事呢?
5 |
6 | 1. 从engine中的models属性里,查找model_name,找到后,如果model_path为字符串,则
7 | 开始导入对应的模块
8 | 2. 导入模块,则开始对Model类进行初始化
9 | 1. 创建Property对象,对于Reference等会对引用的Model执行get_model,所以这里可能循环
10 | 2. 执行Model元类初始化,执行 `__property_config__` 方法
11 | 3. 对类执行bind操作,关联metadata
12 | 1. 根据所有Property来创建Column,执行Property的create方法
13 | 2. 创建Table对象
14 | 3. 处理Model的OnInit方法,如进行索引的处理
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb3/blogs/blog_add.md:
--------------------------------------------------------------------------------
1 | # 添加博客
2 |
3 | 因为现在数据库中还不存在数据,所以让我们先创建添加功能,这样有了数据,就可以实现Blog的展示了。
4 |
5 | 添加功能可以算做是管理功能,在教程后面,我们将实现统一的管理界面。在本章节,我将创建一个管理的View。
6 |
7 | ## 创建 views_admin.py
8 |
9 | 在 `apps/blog` 目录下面创建 `views_admin.py` 文件,输入以下内容:
10 |
11 |
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb3/blogs/codes/01/admin_layout.css:
--------------------------------------------------------------------------------
1 | html, body {margin:0;background-color:white;padding:0;height:100%;}
2 | .head {background-color:#00B5AD;color:white;margin:0em;padding:4px;}
3 | .container {margin-left:210px;position:relative;min-height:100%;background-color:white;}
4 | .side-menu {position:absolute; top: 5px; left:-205px;width:210px;}
5 | .content {padding:10px;}
6 | .content .grid {margin-left:0;margin-right:0;}
7 | .mmGrid table {font-size:14px;}
8 | .mmPaginator {font-size:14px;}
9 | .mmGrid .mmg-backboard label {font-size:14px;width:120px;}
10 | .ui.secondary.inverted.menu .active.item {
11 | background-color: rgba(255, 255, 255, 0.3);
12 | }
13 | .ui.form span.field_required {font-weight:bold;color:red;font-size:1.5em;}
14 | .ui-pnotify-text {font-size:0.6em;}
15 |
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb3/common_apis.md:
--------------------------------------------------------------------------------
1 | # 常用API
2 |
3 | ## manage.py
4 |
5 | ### make_simple_application
6 |
7 | 用于创建application实例。
8 |
9 | ```
10 | def make_simple_application(apps_dir='apps', project_dir=None, include_apps=None,
11 | settings_file='', local_settings_file='',
12 | default_settings=None, dispatcher_cls=None, dispatcher_kwargs=None, reuse=True,
13 | pythonpath=None):
14 | ```
15 |
16 | default_settings --
17 | 用于覆盖缺省的配置信息。格式为 `section/key`, 如 `PARA/test`.
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb3/debug_with_pycharm.md:
--------------------------------------------------------------------------------
1 | # 使用PyCharm进行调试
2 |
3 | Uliweb可以使用象PyCharm进行程序调试,下面讲一下大概的设置方式。
4 |
5 | ## 创建调试配置
6 |
7 | 在PyCharm右上角可以切换运行的配置, 点击后可以看到:
8 |
9 | 
10 |
11 | 选择第一项 `Edit Configuration...`, 然后进入:
12 |
13 | 
14 |
15 | 先点击左上角添加一个配置项。
16 |
17 | 然后在 `Script` 处填上 Uliweb 安装目录下的 `__main__.py` 文件, 这个可以作为启动文件。
18 |
19 | 接着在 `Script Parameters` 处输入将要使用的命令行, 如 `runserver` 。这里还可以指定象 `-p` 之类
20 | 的端口号参数。
21 |
22 | 然后在 `Working Directory` 处填入你的项目目录。
23 |
24 | 这样环境就创建好了。
25 |
26 | ## 调试
27 |
28 | 在需要时,点击环境选项右侧的 Bug 按钮,就可以进入调试环境了。
29 |
30 | 
31 |
32 | 调试窗口一般在下面, 最左侧是用来控制继续运行,停止等的按钮。上面是 Step Over, Step Into, Step Out之类的按钮。
33 |
34 | 它有两个Tab窗口, Debugger用来查看运行变量, 调用栈。 Console是输出控制台。
35 |
36 | 
37 |
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb3/exclude.txt:
--------------------------------------------------------------------------------
1 | conf.py
2 | templates
3 | .git
4 | .svn
5 | _svn
6 | *.pyc
7 | *.bak
8 | *.txt
9 | make.bat
10 | .DS_Store
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb3/installation.md:
--------------------------------------------------------------------------------
1 | # 安装说明
2 |
3 |
4 | ## 要求
5 |
6 |
7 | * Python 2.6+ 3.6+
8 | * setuptools 0.6c11+
9 |
10 |
11 | ## 额外要求
12 |
13 |
14 | * SQLAlchemy 0.6+ (如果使用Uliweb ORM需要安装它)
15 |
16 | 最简单的方法是使用 pip,如(因为uliweb3暂时还未正式发布,所以请使用git中的版本):
17 |
18 |
19 | ```
20 | pip install uliweb3
21 | ```
22 |
23 | 另外如果你想跟踪最新的代码,可以使用git来下载代码,
24 |
25 | ```
26 | git clone https://github.com/limodou/uliweb3.git
27 | cd uliweb3
28 | python setup.py develop
29 | ```
30 |
31 | 使用develop安装只会在Python/site-packages下建一个链接,并不会真正安装,好处就是更新方便。
32 | 不过,当Uliweb的版本升级了,还是要再执行一下安装过程的。
33 |
34 | 当然你也可以直接通过 install 来安装。另外比较建议使用**virtualenv**创建隔离的python环境来使用uliweb3.
35 |
36 |
37 | ```
38 | python setup.py install
39 | ```
40 |
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb3/uliweb_ui/apis.md:
--------------------------------------------------------------------------------
1 | # APIs
2 |
3 | Uliweb-UI 提供了常用的一些js的API,分别描述如下:
4 |
5 | ## load
6 |
7 | ```
8 | load('module', callback)
9 | load(['module', ...], callback)
10 |
11 | function callback () {...}
12 | ```
13 |
14 | load 用来实现动态装入某个ui的组件,其中第一个参数可以是一个组件名或组件数组,它也可以是一个真正的URL.为了方便
15 | 使用,Uliweb-UI将常用的组件定义在了 settings.ini 中, 采用 `TEMPLATE_USE` 的定义方式.这种定义方式可以在
16 | 模板中使用 `{{use "name"}}`, 但是不能直接用在 `load` 中,因此需要使用 `uliweb jsmodule -a uliweb_ui`
17 | 来生成一个叫 `jsmodules.js` 的文件,并且放在 `uliweb_ui/static/jsmodules.js` 下. 使用 `jsmodule`
18 | 命令时,需要在某个项目目录下运行,不能直接运行.
19 |
20 | 通常在 Uliweb-UI 中定义的 module 命令都是以 `ui.` 开始,具体有哪些可以使用的组件,可以查看
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb3/uliweb_ui/rgrid.md:
--------------------------------------------------------------------------------
1 | # rgrid
2 |
3 | ## 按钮
4 |
5 | ### 按钮属性
6 |
7 | lable --
8 | 按钮名称
9 | url --
10 | 按钮链接,如果没有定义 `onClick` 事件回调, 则点击按钮后会直接跳转
11 | class --
12 | 按钮的样式, 按 bootstrap 或 AdminLTE 的风格
13 | onClick --
14 | 点击事件回调
15 | icon --
16 | 按钮图标
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb3/update/update_0.1.5.md:
--------------------------------------------------------------------------------
1 | # 0.1.5
2 |
3 |
4 | 更新内容
5 |
6 |
7 | * 修改cache设置,移除file_dir和lock_dir
8 | * 添加更多的dispatch调用异常输出信息
9 | * 添加uliweb.contrib.form app,添加get_form函数
10 | * 修改auth支持get_form功能
11 | * 改进file_storage过程。
12 | * 修正RedirectException显示bug。
13 | * 添加TablenameConvert到uliweb.orm中,通过orm.set_tablename_converter(converter)传递函数,或者在settings.ini中定义,如:
14 |
15 | > [ORM]
16 | > TABLENAME_CONVERTER = 'uliweb.utils.common.camel_to_'
17 | 当Model名字是CamelCase时,将转化为camel_case
18 | * 添加Reference,OneToOne,ManyToMany关系到Model层级
19 | * 如果collection_name为None,并且tablename_set已存在,将自动创建新的collection_name,因此collection_name将会被会复制,如果传递了collection_name,并且tablename_set已经存在,将抛出异常,请注意其中的差别。
20 | * 修改默认CHAR, str, unicode的max_length为255,之前默认为30.
21 | * 在validator.py添加IS_LENGTH_LESSTHAN和IS_LENGTH_BETWEEN。
22 | * 添加[GLOBAL_OBJECTS]机制,此处的对象配置将被注入到uliweb中。
23 | * 在uliweb中添加validator,使用[VALIDATORS]机制
24 | * 在generic.py中添加IS_LENGTH_LESSTHAN,如果max_length存在。
25 |
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb3/update/update_0.2.1.md:
--------------------------------------------------------------------------------
1 | # 0.2.1
2 |
3 | * 添加 `uliweb.utils.timeit` 模块,用户可以使用 `with timeit(prompt):` 来计算下面
4 | 代码的执行时间
5 | * 修改 `file_serving()` 处理的 `action` 缺省值为 `None`. 这样缺省的 `/uploads` 文件
6 | 服务不再是默认为下载。
7 | * 修复ORM的Reference的validate问题。它影响Reference的默认缺省值。
8 |
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb3/update/update_0.2.3.md:
--------------------------------------------------------------------------------
1 | # 0.2.3
2 |
3 | * 更新nginx配置文件的输出模板,添加 proxy_set_header 指令
4 | * 向 ORM 添加 save_file() 方法,你可以用它保存select之后的结果集到一个csv文件中
5 | * 修复 SortedDict 类中丢失的 clear() 方法
6 | * 修改i18n处理,对于项目和apps方式的抽取,它将首先启动应用,这样是为了让自定义tag可以起作用。但是建议用户尽量不用自定义tag,因为模板中可以直接写python代码。
7 | * 向utils/common.py中添加walk_dirs()方法,这个函数可以用来遍历目录,同时可以支持对文件名和后缀的过滤功能。
8 |
9 |
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb3/update/update_0.2.6.md:
--------------------------------------------------------------------------------
1 | # 0.2.6
2 |
3 | * 増加在定义关系字段时,当引用Model不是字符串而是Model类时发出警告的提示。需
4 | 使用字符串名称。
5 | * 修复在 ListView 和 SelectListView 中对 `manual` 和 `total` 处理的Bug。
6 | * 修复 `rawsql` bug。
7 | * 向 Generic ListView 中増加使用 `get_object` 的调用,使用缓存机制来处理引用对象。
8 | * 修复 `get_cached()` Bug。
9 | * 修复在 Generic 中 AddView 和 EditView 中处理 `process_files()` 的Bug。
10 | * 在进入 Shell 环境前増加对调用 `readline` 的支持。
11 | * 将乐观锁相关的参数由 `occ` 改为 `version` 。
12 | * 修复 ManyToMany 缓存值在保存时没有正确使用的Bug(由于没有存入 `_old_values` )。
13 | * 当在 Model 中定义了主键时,将不再自动创建 `id` 字段,如:
14 |
15 | ```
16 | user_id = Field(int, primary_key=True, autoincrement=True)
17 | ```
18 |
19 | * 修复 `sqldot` 命令在处理 settings.ini 中定义的 Model 名称与 `__tablename__` 不一致
20 | 时的Bug。
21 | * 优化 `sqlhtml` 文档输出,増加 Model 描述及索引的输出。
22 | * 将 `runserver` 的日志输出改为缺省是彩色输出,可以使用 `--nocolor` 关闭。
23 |
--------------------------------------------------------------------------------
/docs/zh_CN/uliweb3/update/update_0.3.1.md:
--------------------------------------------------------------------------------
1 | # 0.3.1 2014-07-04
2 |
3 | ## 问题修复
4 |
5 | * 修复 `include` 在 ini 中的bug
6 | * 修复在 orm.get() 中的condition判断bug
7 | * 修复 recorder bug
8 |
9 | ## 功能优化
10 |
11 | * 增加 qqmail 邮件服务后端支持,感谢 Yubin Wang {{=message}}
6 | {{end}} -------------------------------------------------------------------------------- /projects/uliweb/guestbook/apps/GuestBook/templates/index.html: -------------------------------------------------------------------------------- 1 | {{extend "base.html"}} 2 | {{block content}} 3 |{{<
{{=message}}
5 | {{pass}} 6 |