python学习

This commit is contained in:
2019-07-29 15:28:02 +08:00
parent 5ee5b5035c
commit 04327fbd47
18 changed files with 709 additions and 274 deletions

550
.idea/workspace.xml generated
View File

@@ -2,12 +2,24 @@
<project version="4">
<component name="ChangeListManager">
<list default="true" id="d564f57a-9f96-4262-9481-cacdf2b8445c" name="Default" comment="python学习">
<change afterPath="$PROJECT_DIR$/common/models/log/AppAccessLog.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/common/models/log/AppErrorLog.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/web/templates/common/tab_account.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/com" afterDir="false" />
<change afterPath="$PROJECT_DIR$/common/libs/LogService.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/web/interceptors/ErrorInterceptor.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/web/static/js/account/index.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/web/static/js/account/set.js" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/common/libs/Helper.py" beforeDir="false" afterPath="$PROJECT_DIR$/common/libs/Helper.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/common/libs/UrlManager.py" beforeDir="false" afterPath="$PROJECT_DIR$/common/libs/UrlManager.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/common/models/log/AppAccessLog.py" beforeDir="false" afterPath="$PROJECT_DIR$/common/models/log/AppAccessLog.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/common/models/log/AppErrorLog.py" beforeDir="false" afterPath="$PROJECT_DIR$/common/models/log/AppErrorLog.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/config/base_setting.py" beforeDir="false" afterPath="$PROJECT_DIR$/config/base_setting.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/config/local_setting.py" beforeDir="false" afterPath="$PROJECT_DIR$/config/local_setting.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/web/controllers/account/Account.py" beforeDir="false" afterPath="$PROJECT_DIR$/web/controllers/account/Account.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/web/templates/account/info.html" beforeDir="false" afterPath="$PROJECT_DIR$/web/templates/account/info.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/web/controllers/user/User.py" beforeDir="false" afterPath="$PROJECT_DIR$/web/controllers/user/User.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/web/interceptors/AuthInterceptor.py" beforeDir="false" afterPath="$PROJECT_DIR$/web/interceptors/AuthInterceptor.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/web/templates/account/index.html" beforeDir="false" afterPath="$PROJECT_DIR$/web/templates/account/index.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/web/templates/account/set.html" beforeDir="false" afterPath="$PROJECT_DIR$/web/templates/account/set.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/www.py" beforeDir="false" afterPath="$PROJECT_DIR$/www.py" afterDir="false" />
</list>
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="SHOW_DIALOG" value="false" />
@@ -18,45 +30,63 @@
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/web/controllers/user/User.py">
<entry file="file://$PROJECT_DIR$/web/interceptors/AuthInterceptor.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1268">
<caret line="117" lean-forward="true" selection-start-line="117" selection-end-line="117" />
<state relative-caret-position="372">
<caret line="30" lean-forward="true" selection-start-line="30" selection-end-line="30" />
<folding>
<element signature="e#24#91#0" expanded="true" />
<element signature="e#461#1600#0" />
<element signature="e#1670#2484#0" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/web/controllers/account/Account.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="226">
<caret line="45" selection-start-line="45" selection-end-line="45" />
<folding>
<element signature="e#24#68#0" expanded="true" />
<element signature="e#24#51#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/web/templates/common/tab_account.html">
<entry file="file://$PROJECT_DIR$/web/interceptors/ErrorInterceptor.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="310">
<caret line="10" column="6" lean-forward="true" selection-start-line="10" selection-start-column="6" selection-end-line="10" selection-end-column="6" />
<state relative-caret-position="248">
<caret line="8" column="10" selection-start-line="8" selection-start-column="10" selection-end-line="8" selection-end-column="10" />
<folding>
<element signature="e#24#52#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/web/templates/account/info.html">
<entry file="file://$PROJECT_DIR$/www.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2046">
<caret line="66" column="14" lean-forward="true" selection-start-line="66" selection-start-column="14" selection-end-line="66" selection-end-column="14" />
<state relative-caret-position="217">
<caret line="7" column="28" selection-start-line="7" selection-start-column="28" selection-end-line="7" selection-end-column="28" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/web/templates/error/error.html">
<provider selected="true" editor-type-id="text-editor" />
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/common/libs/LogService.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="178">
<caret line="25" column="8" selection-start-line="25" selection-start-column="8" selection-end-line="25" selection-end-column="8" />
<folding>
<element signature="e#24#51#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/common/libs/UrlManager.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="496">
<caret line="16" column="22" selection-start-line="16" selection-start-column="22" selection-end-line="16" selection-end-column="22" />
<folding>
<element signature="e#24#35#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
@@ -64,7 +94,8 @@
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/common/models/log/AppAccessLog.py">
<provider selected="true" editor-type-id="text-editor">
<state>
<state relative-caret-position="155">
<caret line="5" lean-forward="true" selection-start-line="5" selection-end-line="5" />
<folding>
<element signature="e#16#90#0" expanded="true" />
</folding>
@@ -75,7 +106,8 @@
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/common/models/log/AppErrorLog.py">
<provider selected="true" editor-type-id="text-editor">
<state>
<state relative-caret-position="215">
<caret line="7" lean-forward="true" selection-start-line="7" selection-end-line="7" />
<folding>
<element signature="e#16#78#0" expanded="true" />
</folding>
@@ -83,41 +115,20 @@
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/web/templates/account/index.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="288">
<caret line="97" column="14" lean-forward="true" selection-start-line="97" selection-start-column="14" selection-end-line="97" selection-end-column="14" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/application.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="474">
<caret line="16" selection-start-line="16" selection-end-line="16" />
<folding>
<element signature="e#24#47#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/config/base_setting.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="364">
<caret line="16" lean-forward="true" selection-start-line="16" selection-end-line="16" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/config/local_setting.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="186">
<caret line="6" column="31" lean-forward="true" selection-start-line="6" selection-start-column="31" selection-end-line="6" selection-end-column="31" />
<state relative-caret-position="62">
<caret line="2" column="12" lean-forward="true" selection-start-line="2" selection-start-column="12" selection-end-line="2" selection-end-column="12" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/web/static/js/account/index.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1426">
<caret line="46" column="2" lean-forward="true" selection-start-line="46" selection-start-column="2" selection-end-line="46" selection-end-column="2" />
</state>
</provider>
</entry>
@@ -137,6 +148,13 @@
<find>route_user</find>
<find>login_name</find>
<find>render_template</find>
<find>set</find>
<find>user.uid</find>
<find>first</find>
<find>page_p</find>
<find>ajax</find>
<find>账户</find>
<find>请输入姓名</find>
</findStrings>
<replaceStrings>
<replace>ops_render</replace>
@@ -149,7 +167,6 @@
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/imooc.py" />
<option value="$PROJECT_DIR$/common/libs/UrlManager.py" />
<option value="$PROJECT_DIR$/Hello.py" />
<option value="$PROJECT_DIR$/config/production.py" />
<option value="$PROJECT_DIR$/docs/mysql.md" />
@@ -157,7 +174,6 @@
<option value="$PROJECT_DIR$/manager.py" />
<option value="$PROJECT_DIR$/mina/project.config.json" />
<option value="$PROJECT_DIR$/common/models/User.py" />
<option value="$PROJECT_DIR$/config/local_setting.py" />
<option value="$PROJECT_DIR$/requirements.txt" />
<option value="$PROJECT_DIR$/application.py" />
<option value="$PROJECT_DIR$/config/__init__.py" />
@@ -165,23 +181,29 @@
<option value="$PROJECT_DIR$/web/templates/user/login.html" />
<option value="$PROJECT_DIR$/web/static/js/common.js" />
<option value="$PROJECT_DIR$/web/static/js/user/login.js" />
<option value="$PROJECT_DIR$/www.py" />
<option value="$PROJECT_DIR$/web/templates/common/layout_main.html" />
<option value="$PROJECT_DIR$/common/libs/user/Helper.py" />
<option value="$PROJECT_DIR$/web/interceptors/AuthInterceptor.py" />
<option value="$PROJECT_DIR$/web/controllers/index.py" />
<option value="$PROJECT_DIR$/web/controllers/stat/Stat.py" />
<option value="$PROJECT_DIR$/web/controllers/member/Member.py" />
<option value="$PROJECT_DIR$/web/controllers/food/Food.py" />
<option value="$PROJECT_DIR$/web/controllers/finance/Finance.py" />
<option value="$PROJECT_DIR$/web/static/js/user/edit.js" />
<option value="$PROJECT_DIR$/web/controllers/user/User.py" />
<option value="$PROJECT_DIR$/web/templates/user/edit.html" />
<option value="$PROJECT_DIR$/web/templates/account/info.html" />
<option value="$PROJECT_DIR$/common/libs/Helper.py" />
<option value="$PROJECT_DIR$/config/base_setting.py" />
<option value="$PROJECT_DIR$/web/templates/account/index.html" />
<option value="$PROJECT_DIR$/web/templates/account/info.html" />
<option value="$PROJECT_DIR$/web/controllers/account/Account.py" />
<option value="$PROJECT_DIR$/web/templates/account/index.html" />
<option value="$PROJECT_DIR$/web/templates/account/set.html" />
<option value="$PROJECT_DIR$/web/controllers/user/User.py" />
<option value="$PROJECT_DIR$/web/static/js/account/index.js" />
<option value="$PROJECT_DIR$/common/libs/UrlManager.py" />
<option value="$PROJECT_DIR$/config/local_setting.py" />
<option value="$PROJECT_DIR$/common/models/log/AppAccessLog.py" />
<option value="$PROJECT_DIR$/common/models/log/AppErrorLog.py" />
<option value="$PROJECT_DIR$/web/interceptors/AuthInterceptor.py" />
<option value="$PROJECT_DIR$/www.py" />
</list>
</option>
</component>
@@ -195,10 +217,10 @@
<packageJsonPaths />
</component>
<component name="ProjectFrameBounds">
<option name="x" value="963" />
<option name="y" value="22" />
<option name="width" value="938" />
<option name="height" value="1028" />
<option name="x" value="960" />
<option name="y" value="20" />
<option name="width" value="958" />
<option name="height" value="939" />
</component>
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
<component name="ProjectView">
@@ -224,6 +246,13 @@
<item name="common" type="462c0819:PsiDirectoryNode" />
<item name="libs" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="order" type="b2602c69:ProjectViewProjectNode" />
<item name="order" type="462c0819:PsiDirectoryNode" />
<item name="common" type="462c0819:PsiDirectoryNode" />
<item name="libs" type="462c0819:PsiDirectoryNode" />
<item name="user" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="order" type="b2602c69:ProjectViewProjectNode" />
<item name="order" type="462c0819:PsiDirectoryNode" />
@@ -237,11 +266,63 @@
<item name="models" type="462c0819:PsiDirectoryNode" />
<item name="log" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="order" type="b2602c69:ProjectViewProjectNode" />
<item name="order" type="462c0819:PsiDirectoryNode" />
<item name="config" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="order" type="b2602c69:ProjectViewProjectNode" />
<item name="order" type="462c0819:PsiDirectoryNode" />
<item name="web" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="order" type="b2602c69:ProjectViewProjectNode" />
<item name="order" type="462c0819:PsiDirectoryNode" />
<item name="web" type="462c0819:PsiDirectoryNode" />
<item name="controllers" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="order" type="b2602c69:ProjectViewProjectNode" />
<item name="order" type="462c0819:PsiDirectoryNode" />
<item name="web" type="462c0819:PsiDirectoryNode" />
<item name="controllers" type="462c0819:PsiDirectoryNode" />
<item name="account" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="order" type="b2602c69:ProjectViewProjectNode" />
<item name="order" type="462c0819:PsiDirectoryNode" />
<item name="web" type="462c0819:PsiDirectoryNode" />
<item name="controllers" type="462c0819:PsiDirectoryNode" />
<item name="user" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="order" type="b2602c69:ProjectViewProjectNode" />
<item name="order" type="462c0819:PsiDirectoryNode" />
<item name="web" type="462c0819:PsiDirectoryNode" />
<item name="interceptors" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="order" type="b2602c69:ProjectViewProjectNode" />
<item name="order" type="462c0819:PsiDirectoryNode" />
<item name="web" type="462c0819:PsiDirectoryNode" />
<item name="static" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="order" type="b2602c69:ProjectViewProjectNode" />
<item name="order" type="462c0819:PsiDirectoryNode" />
<item name="web" type="462c0819:PsiDirectoryNode" />
<item name="static" type="462c0819:PsiDirectoryNode" />
<item name="js" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="order" type="b2602c69:ProjectViewProjectNode" />
<item name="order" type="462c0819:PsiDirectoryNode" />
<item name="web" type="462c0819:PsiDirectoryNode" />
<item name="static" type="462c0819:PsiDirectoryNode" />
<item name="js" type="462c0819:PsiDirectoryNode" />
<item name="account" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="order" type="b2602c69:ProjectViewProjectNode" />
<item name="order" type="462c0819:PsiDirectoryNode" />
@@ -262,6 +343,13 @@
<item name="templates" type="462c0819:PsiDirectoryNode" />
<item name="common" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="order" type="b2602c69:ProjectViewProjectNode" />
<item name="order" type="462c0819:PsiDirectoryNode" />
<item name="web" type="462c0819:PsiDirectoryNode" />
<item name="templates" type="462c0819:PsiDirectoryNode" />
<item name="error" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="order" type="b2602c69:ProjectViewProjectNode" />
<item name="External Libraries" type="cb654da1:ExternalLibrariesNode" />
@@ -276,7 +364,7 @@
<component name="PropertiesComponent">
<property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
<property name="WebServerToolWindowFactoryState" value="false" />
<property name="last_opened_file_path" value="$PROJECT_DIR$/web/templates/common" />
<property name="last_opened_file_path" value="$PROJECT_DIR$/web/templates" />
<property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
<property name="nodejs_npm_path_reset_for_default_project" value="true" />
<property name="options.lastSelected" value="com.jetbrains.python.configuration.PythonSdkConfigurable" />
@@ -287,11 +375,11 @@
</component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="D:\order\web\templates" />
<recent name="D:\order\web\interceptors" />
<recent name="D:\order\common\libs" />
<recent name="D:\order\web\templates\common" />
<recent name="D:\order\common\models" />
<recent name="D:\order\web\static\js\user" />
<recent name="D:\order\web\templates\user" />
<recent name="D:\order" />
<recent name="D:\order\web\static\js\account" />
</key>
<key name="MoveFile.RECENT_KEYS">
<recent name="D:\order\common\libs" />
@@ -379,7 +467,14 @@
<option name="project" value="LOCAL" />
<updated>1563789519074</updated>
</task>
<option name="localTasksCounter" value="9" />
<task id="LOCAL-00009" summary="python学习">
<created>1563790035610</created>
<option name="number" value="00009" />
<option name="presentableId" value="LOCAL-00009" />
<option name="project" value="LOCAL" />
<updated>1563790035610</updated>
</task>
<option name="localTasksCounter" value="10" />
<servers />
</component>
<component name="TodoView">
@@ -392,10 +487,9 @@
</todo-panel>
</component>
<component name="ToolWindowManager">
<frame x="963" y="22" width="938" height="1028" extended-state="0" />
<editor active="true" />
<frame x="960" y="20" width="958" height="939" extended-state="0" />
<layout>
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.2777778" />
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.27173913" />
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
<window_info id="Favorites" order="2" side_tool="true" />
<window_info id="Project Explorer" order="3" />
@@ -410,7 +504,7 @@
<window_info anchor="bottom" id="TODO" order="6" weight="0.32960895" />
<window_info anchor="bottom" id="Docker" order="7" show_stripe_button="false" />
<window_info anchor="bottom" id="Database Changes" order="8" show_stripe_button="false" />
<window_info anchor="bottom" id="Terminal" order="9" visible="true" weight="0.3642458" />
<window_info anchor="bottom" id="Terminal" order="9" visible="true" weight="0.29404467" />
<window_info anchor="bottom" id="Event Log" order="10" side_tool="true" />
<window_info anchor="bottom" id="Version Control" order="11" />
<window_info anchor="bottom" id="Python Console" order="12" />
@@ -434,47 +528,6 @@
<option name="LAST_COMMIT_MESSAGE" value="python学习" />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/mina/app.json">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/mina/pages/my/index.js">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/mina/.idea/mina.iml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="217">
<caret line="7" column="9" selection-start-line="7" selection-start-column="9" selection-end-line="7" selection-end-column="9" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/mina/project.config.json">
<provider selected="true" editor-type-id="text-editor">
<state>
<caret line="11" column="32" selection-start-line="11" selection-start-column="32" selection-end-line="11" selection-end-column="32" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/venv/Lib/site-packages/flask_sqlalchemy/__init__.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-28">
<caret line="604" column="6" selection-start-line="604" selection-start-column="6" selection-end-line="604" selection-end-column="6" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/venv/Lib/site-packages/sqlalchemy/orm/query.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1460">
<caret line="1768" column="8" selection-start-line="1768" selection-start-column="8" selection-end-line="1768" selection-end-column="8" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/venv/Lib/site-packages/sqlalchemy/dialects/mysql/mysqldb.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="166">
<caret line="117" selection-start-line="117" selection-end-line="117" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/venv/Lib/site-packages/sqlalchemy/engine/strategies.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="166">
@@ -530,64 +583,21 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/common/models/User.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="62">
<caret line="5" selection-start-line="5" selection-end-line="5" />
<folding>
<element signature="e#16#84#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/common/libs/user/UserService.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="186">
<caret line="6" column="8" selection-start-line="6" selection-start-column="8" selection-end-line="6" selection-end-column="8" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/web/interceptors/__init__.py">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/web/interceptors/ErrorInterceptor.py" />
<entry file="file://$PROJECT_DIR$/www.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="93">
<caret line="3" column="3" lean-forward="true" selection-start-line="3" selection-start-column="3" selection-end-line="3" selection-end-column="3" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/README.en.md" />
<entry file="file://$PROJECT_DIR$/web/interceptors/ApiAuthInterceptor.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-558">
<folding>
<element signature="e#24#51#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/web/interceptors/ApiAuthInterceptor.py" />
<entry file="file://$PROJECT_DIR$/readme.md">
<provider editor-type-id="text-editor">
<state relative-caret-position="108">
<caret line="2" column="4" lean-forward="true" selection-start-line="2" selection-start-column="4" selection-end-line="2" selection-end-column="4" />
</state>
</provider>
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
<state split_layout="SPLIT">
<first_editor />
<second_editor />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/web/interceptors/AuthInterceptor.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="339">
<caret line="20" column="29" lean-forward="true" selection-start-line="20" selection-start-column="29" selection-end-line="20" selection-end-column="29" />
<folding>
<element signature="e#24#51#0" expanded="true" />
</folding>
<provider editor-type-id="text-editor">
<state relative-caret-position="108">
<caret line="2" column="4" lean-forward="true" selection-start-line="2" selection-start-column="4" selection-end-line="2" selection-end-column="4" />
</state>
</provider>
</entry>
@@ -674,36 +684,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/web/controllers/user/User.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1268">
<caret line="117" lean-forward="true" selection-start-line="117" selection-end-line="117" />
<folding>
<element signature="e#24#91#0" expanded="true" />
<element signature="e#461#1600#0" />
<element signature="e#1670#2484#0" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/common/libs/Helper.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="217">
<caret line="51" selection-start-line="51" selection-end-line="51" />
<folding>
<element signature="e#24#59#0" expanded="true" />
<element signature="e#122#1176#0" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/web/templates/common/tab_user.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="279">
<caret line="9" column="21" lean-forward="true" selection-start-line="9" selection-start-column="21" selection-end-line="9" selection-end-column="21" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/web/templates/user/reset_pwd.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="62">
@@ -720,7 +700,7 @@
</entry>
<entry file="file://$PROJECT_DIR$/application.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="474">
<state relative-caret-position="372">
<caret line="16" selection-start-line="16" selection-end-line="16" />
<folding>
<element signature="e#24#47#0" expanded="true" />
@@ -728,30 +708,121 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/config/local_setting.py">
<entry file="file://$PROJECT_DIR$/common/libs/Helper.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="186">
<caret line="6" column="31" lean-forward="true" selection-start-line="6" selection-start-column="31" selection-end-line="6" selection-end-column="31" />
<state relative-caret-position="399">
<caret line="67" selection-start-line="67" selection-end-line="67" />
<folding>
<element signature="e#24#59#0" expanded="true" />
<element signature="e#122#1176#0" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/config/base_setting.py">
<entry file="file://$PROJECT_DIR$/common/libs/user/UserService.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="364">
<caret line="16" lean-forward="true" selection-start-line="16" selection-end-line="16" />
<state relative-caret-position="168">
<caret line="20" column="8" selection-start-line="20" selection-start-column="8" selection-end-line="20" selection-end-column="8" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/web/templates/common/tab_account.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="310">
<caret line="10" column="6" selection-start-line="10" selection-start-column="6" selection-end-line="10" selection-end-column="6" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/web/controllers/account/Account.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="4805">
<caret line="161" selection-start-line="161" selection-end-line="161" />
<folding>
<element signature="e#24#76#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/web/templates/account/info.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2046">
<caret line="66" column="14" selection-start-line="66" selection-start-column="14" selection-end-line="66" selection-end-column="14" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/web/static/js/account/set.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2015">
<caret line="65" column="50" selection-start-line="65" selection-start-column="43" selection-end-line="65" selection-end-column="50" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/web/templates/account/index.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="288">
<caret line="97" column="14" lean-forward="true" selection-start-line="97" selection-start-column="14" selection-end-line="97" selection-end-column="14" />
<state relative-caret-position="62">
<caret line="2" column="39" selection-start-line="2" selection-start-column="39" selection-end-line="2" selection-end-column="39" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/web/templates/common/tab_user.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="279">
<caret line="9" column="21" lean-forward="true" selection-start-line="9" selection-start-column="21" selection-end-line="9" selection-end-column="21" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/config/base_setting.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="620">
<caret line="20" column="14" selection-start-line="20" selection-end-line="20" selection-end-column="14" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/web/templates/account/set.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="186">
<caret line="6" column="8" selection-start-line="6" selection-start-column="8" selection-end-line="6" selection-end-column="8" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/web/controllers/user/User.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="899">
<caret line="41" lean-forward="true" selection-start-line="41" selection-end-line="41" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/web/static/js/account/index.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1426">
<caret line="46" column="2" lean-forward="true" selection-start-line="46" selection-start-column="2" selection-end-line="46" selection-end-column="2" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/config/local_setting.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="62">
<caret line="2" column="12" lean-forward="true" selection-start-line="2" selection-start-column="12" selection-end-line="2" selection-end-column="12" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/common/models/User.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="343">
<caret line="22" lean-forward="true" selection-start-line="22" selection-end-line="22" />
<folding>
<element signature="e#16#84#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/common/models/AppAccessLog.py">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/common/models/log/AppAccessLog.py">
<provider selected="true" editor-type-id="text-editor">
<state>
<state relative-caret-position="155">
<caret line="5" lean-forward="true" selection-start-line="5" selection-end-line="5" />
<folding>
<element signature="e#16#90#0" expanded="true" />
</folding>
@@ -760,34 +831,61 @@
</entry>
<entry file="file://$PROJECT_DIR$/common/models/log/AppErrorLog.py">
<provider selected="true" editor-type-id="text-editor">
<state>
<state relative-caret-position="215">
<caret line="7" lean-forward="true" selection-start-line="7" selection-end-line="7" />
<folding>
<element signature="e#16#78#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/web/templates/account/info.html">
<entry file="file://$PROJECT_DIR$/common/libs/UrlManager.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2046">
<caret line="66" column="14" lean-forward="true" selection-start-line="66" selection-start-column="14" selection-end-line="66" selection-end-column="14" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/web/controllers/account/Account.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="226">
<caret line="45" selection-start-line="45" selection-end-line="45" />
<state relative-caret-position="496">
<caret line="16" column="22" selection-start-line="16" selection-start-column="22" selection-end-line="16" selection-end-column="22" />
<folding>
<element signature="e#24#68#0" expanded="true" />
<element signature="e#24#35#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/web/templates/common/tab_account.html">
<entry file="file://$PROJECT_DIR$/web/templates/error/error.html">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/web/interceptors/AuthInterceptor.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="310">
<caret line="10" column="6" lean-forward="true" selection-start-line="10" selection-start-column="6" selection-end-line="10" selection-end-column="6" />
<state relative-caret-position="372">
<caret line="30" lean-forward="true" selection-start-line="30" selection-end-line="30" />
<folding>
<element signature="e#24#51#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/common/libs/LogService.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="178">
<caret line="25" column="8" selection-start-line="25" selection-start-column="8" selection-end-line="25" selection-end-column="8" />
<folding>
<element signature="e#24#51#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/www.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="217">
<caret line="7" column="28" selection-start-line="7" selection-start-column="28" selection-end-line="7" selection-end-column="28" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/web/interceptors/ErrorInterceptor.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="248">
<caret line="8" column="10" selection-start-line="8" selection-start-column="10" selection-end-line="8" selection-end-column="10" />
<folding>
<element signature="e#24#52#0" expanded="true" />
</folding>
</state>
</provider>
</entry>

22
com Normal file
View File

@@ -0,0 +1,22 @@
# coding: utf-8
from sqlalchemy import BigInteger, Column, DateTime, Integer, String, Text
from sqlalchemy.schema import FetchedValue
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
metadata = Base.metadata
class AppAccessLog(Base):
__tablename__ = 'app_access_log'
id = Column(Integer, primary_key=True)
uid = Column(BigInteger, nullable=False, index=True, server_default=FetchedValue())
referer_url = Column(String(255), nullable=False, server_default=FetchedValue())
target_url = Column(String(255), nullable=False, server_default=FetchedValue())
query_params = Column(Text, nullable=False)
ua = Column(String(255), nullable=False, server_default=FetchedValue())
ip = Column(String(32), nullable=False, server_default=FetchedValue())
note = Column(String(1000), nullable=False, server_default=FetchedValue())
created_time = Column(DateTime, nullable=False, server_default=FetchedValue())

View File

@@ -58,3 +58,10 @@ def ops_render( template,context = {} ):
if 'current_user' in g:
context['current_user'] = g.current_user
return render_template( template,**context )
'''
获取当前时间
'''
def getCurrentDate( format = "%Y-%m-%d %H:%M:%S"):
#return datetime.datetime.now().strftime( format )
return datetime.datetime.now()

37
common/libs/LogService.py Normal file
View File

@@ -0,0 +1,37 @@
# -*- coding: utf-8 -*-
from flask import request,g
from application import app,db
import json
from common.libs.Helper import getCurrentDate
from common.models.log.AppAccessLog import AppAccessLog
from common.models.log.AppErrorLog import AppErrorLog
class LogService():
@staticmethod
def addAccessLog():
target = AppAccessLog()
target.target_url = request.url
target.referer_url = request.referrer
target.ip = request.remote_addr
target.query_params = json.dumps( request.values.to_dict() )
if 'current_user' in g and g.current_user is not None:
target.uid = g.current_user.uid
target.ua = request.headers.get( "User-Agent" )
target.created_time = getCurrentDate()
db.session.add( target )
db.session.commit( )
return True
@staticmethod
def addErrorLog( content ):
if 'favicon.ico' in request.url:
return
target = AppErrorLog()
target.target_url = request.url
target.referer_url = request.referrer
target.query_params = json.dumps(request.values.to_dict())
target.content = content
target.created_time = getCurrentDate()
db.session.add(target)
db.session.commit()
return True

View File

@@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
import time
from application import app
class UrlManager(object):
def __init__(self):
pass
@@ -10,6 +11,7 @@ class UrlManager(object):
@staticmethod
def buildStaticUrl(path):
ver = "%s"%( 22222222 )
release_version = app.config.get('RELEASE_VERSION')
ver = "%s" % (int(time.time())) if not release_version else release_version
path = "/static" + path + "?ver=" + ver
return UrlManager.buildUrl( path )

View File

@@ -4,7 +4,6 @@ from sqlalchemy.schema import FetchedValue
from application import db
class AppAccessLog(db.Model):
__tablename__ = 'app_access_log'

View File

@@ -1,9 +1,13 @@
# coding: utf-8
from sqlalchemy import Column, DateTime, Integer, String, Text
from sqlalchemy.schema import FetchedValue
from application import db
class AppErrorLog(db.Model):
__tablename__ = 'app_error_log'

View File

@@ -17,3 +17,8 @@ IGNORE_CHECK_LOGIN_URLS = [
PAGE_SIZE = 50
PAGE_DISPLAY = 10
STATUS_MAPPING = {
"1":"正常",
"0":"已删除"
}

View File

@@ -5,3 +5,4 @@ SQLALCHEMY_ECHO = True
SQLALCHEMY_DATABASE_URI = 'mysql://root:123456@127.0.0.1/food_db'
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_ENCODING = "utf8mb4"
# RELEASE_VERSION = "20190730"

View File

@@ -1,9 +1,11 @@
# -*- coding: utf-8 -*-
from flask import Blueprint,request,redirect
from common.libs.Helper import ops_render,iPagination
from flask import Blueprint,request,redirect,jsonify
from common.libs.Helper import ops_render,iPagination,getCurrentDate
from common.libs.UrlManager import UrlManager
from common.libs.user.UserService import UserService
from common.models.User import User
from common.models.log.AppAccessLog import AppAccessLog
from sqlalchemy import or_
route_account = Blueprint( 'account_page',__name__ )
from application import app,db
@route_account.route( "/index" )
@@ -13,12 +15,17 @@ def index():
page = int(req['p']) if ('p' in req and req['p']) else 1
query = User.query
if 'mix_kw' in req:
rule = or_( User.nickname.ilike( "%{0}%".format( req['mix_kw'] ) ),User.mobile.ilike( "%{0}%".format( req['mix_kw'] ) ))
query = query.filter( rule )
if 'status' in req and int( req['status'] ) > -1:
query = query.filter( User.status == int( req['status']) )
page_params = {
'total': query.count(),
'page_size': app.config['PAGE_SIZE'],
'page': page,
'display': app.config['PAGE_DISPLAY'],
'url': '/account/index'
'url': request.full_path.replace( "&p={}".format(page),"")
}
pages = iPagination(page_params)
@@ -29,6 +36,8 @@ def index():
resp_data['list'] = list
resp_data['pages'] = pages
resp_data['search_con'] = req
resp_data['status_mapping'] = app.config['STATUS_MAPPING']
return ops_render("account/index.html", resp_data)
@route_account.route( "/info" )
@@ -48,6 +57,111 @@ def info():
return ops_render("account/info.html", resp_data)
@route_account.route( "/set" )
@route_account.route( "/set" ,methods=["GET", "POST"])
def set():
return ops_render( "account/set.html" )
default_pwd = "******"
if request.method == "GET":
resp_data = {}
req = request.args
uid = int( req.get( "id",0))
info = None
if uid:
info = User.query.filter_by( uid = uid ).first()
resp_data['info'] = info
return ops_render( "account/set.html",resp_data)
resp = { 'code':200,'msg':'操作成功~~','data':{} }
req = request.values
id = req['id'] if 'id' in req else 0
nickname = req['nickname'] if 'nickname' in req else ''
mobile = req['mobile'] if 'mobile' in req else ''
email = req['email'] if 'email' in req else ''
login_name = req['login_name'] if 'login_name' in req else ''
login_pwd = req['login_pwd'] if 'login_pwd' in req else ''
if nickname is None or len( nickname ) < 1:
resp['code'] = -1
resp['msg'] = "请输入符合规范的姓名~~"
return jsonify( resp )
if mobile is None or len( mobile ) < 1:
resp['code'] = -1
resp['msg'] = "请输入符合规范的手机号码~~"
return jsonify( resp )
if email is None or len( email ) < 1:
resp['code'] = -1
resp['msg'] = "请输入符合规范的邮箱~~"
return jsonify( resp )
if login_name is None or len( login_name ) < 1:
resp['code'] = -1
resp['msg'] = "请输入符合规范的登录用户名~~"
return jsonify( resp )
if login_pwd is None or len( email ) < 6:
resp['code'] = -1
resp['msg'] = "请输入符合规范的登录密码~~"
return jsonify( resp )
has_in = User.query.filter( User.login_name == login_name,User.uid!= id).first()
if has_in:
resp['code'] = -1
resp['msg'] = "该登录名已存在,请换一个试试~~"
return jsonify(resp)
user_info = User.query.filter_by(uid=id).first()
if user_info:
model_user = user_info
else:
model_user = User()
model_user.created_time = getCurrentDate()
model_user.login_salt = UserService.geneSalt()
model_user.nickname = nickname
model_user.mobile = mobile
model_user.email = email
model_user.login_name = login_name
if login_pwd != default_pwd:
model_user.login_pwd = UserService.genePwd( login_pwd,model_user.login_salt )
model_user.created_time = getCurrentDate()
db.session.add( model_user )
db.session.commit()
return jsonify(resp)
@route_account.route("/ops",methods = [ "POST" ])
def ops():
resp = {'code': 200, 'msg': '操作成功~~', 'data': {}}
req = request.values
id = req['id'] if 'id' in req else 0
act = req['act'] if 'act' in req else ''
if not id :
resp['code'] = -1
resp['msg'] = "请选择要操作的账号~~"
return jsonify(resp)
if act not in [ 'remove','recover' ] :
resp['code'] = -1
resp['msg'] = "操作有误,请重试~~"
return jsonify(resp)
user_info = User.query.filter_by(uid=id).first()
if not user_info:
resp['code'] = -1
resp['msg'] = "指定账号不存在~~"
return jsonify(resp)
if act == "remove":
user_info.status = 0
elif act == "recover":
user_info.status = 1
user_info.update_time = getCurrentDate()
db.session.add(user_info)
db.session.commit()
return jsonify(resp)

View File

@@ -40,6 +40,12 @@ def login():
resp['msg'] = "请输入正确的登录用户名和密码-2~~"
return jsonify(resp)
if user_info.status !=1:
resp['code'] = -1
resp['msg'] = "帐号已被禁用,请联系管理员处理~~"
return jsonify(resp)
response = make_response(json.dumps(resp))
response.set_cookie(app.config['AUTH_COOKIE_NAME'], '%s#%s' % (
UserService.geneAuthCode(user_info), user_info.uid)) # 保存120天

View File

@@ -5,6 +5,7 @@ from flask import request,g,redirect
from common.models.User import ( User )
from common.libs.user.UserService import ( UserService )
from common.libs.UrlManager import ( UrlManager )
from common.libs.LogService import LogService
import re
@app.before_request
@@ -22,7 +23,8 @@ def before_request():
g.current_user=None
if user_info:
g.current_user=user_info
# 加入日志
LogService.addAccessLog()
pattern = re.compile('%s' % "|".join(ignore_urls))
if pattern.match(path):
return

View File

@@ -0,0 +1,9 @@
# -*- coding: utf-8 -*-
from application import app
from common.libs.Helper import ops_render
from common.libs.LogService import LogService
@app.errorhandler( 404 )
def error_404( e ):
LogService.addErrorLog( str( e ) )
return ops_render( 'error/error.html',{ 'status':404,'msg':'很抱歉!您访问的页面不存在' } )

View File

@@ -0,0 +1,51 @@
;
var account_index_ops = {
init:function(){
this.eventBind();
},
eventBind:function(){
var that = this;
$(".wrap_search .search").click(function(){
$(".wrap_search").submit();
});
$(".remove").click( function(){
that.ops( "remove",$(this).attr("data") );
} );
$(".recover").click( function(){
that.ops( "recover",$(this).attr("data") );
} );
},
ops:function( act,id ){
var callback = {
'ok':function(){
$.ajax({
url:common_ops.buildUrl( "/account/ops" ),
type:'POST',
data:{
act:act,
id:id
},
dataType:'json',
success:function( res ){
var callback = null;
if( res.code == 200 ){
callback = function(){
window.location.href = window.location.href;
}
}
common_ops.alert( res.msg,callback );
}
});
},
'cancel':null
};
common_ops.confirm( ( act == "remove" ? "确定删除?":"确定恢复?" ), callback );
}
};
$(document).ready( function(){
account_index_ops.init();
} );

View File

@@ -0,0 +1,89 @@
;
var account_set_ops = {
init:function(){
this.eventBind();
},
eventBind:function(){
$(".wrap_account_set .save").click(function(){
var btn_target = $(this);
if( btn_target.hasClass("disabled") ){
common_ops.alert("正在处理!!请不要重复提交~~");
return;
}
var nickname_target = $(".wrap_account_set input[name=nickname]");
var nickname = nickname_target.val();
var mobile_target = $(".wrap_account_set input[name=mobile]");
var mobile = mobile_target.val();
var email_target = $(".wrap_account_set input[name=email]");
var email = email_target.val();
var login_name_target = $(".wrap_account_set input[name=login_name]");
var login_name = login_name_target.val();
var login_pwd_target = $(".wrap_account_set input[name=login_pwd]");
var login_pwd = login_pwd_target.val();
if( nickname.length < 1 ){
common_ops.tip( "请输入符合规范的姓名~~",nickname_target );
return false;
}
if( mobile.length < 1 ){
common_ops.tip( "请输入符合规范的手机号码~~",mobile_target );
return false;
}
if( email.length < 1 ){
common_ops.tip( "请输入符合规范的邮箱~~",email_target );
return false;
}
if( login_name.length < 1 ){
common_ops.tip( "请输入符合规范的登录用户名~~",login_name_target );
return false;
}
if( login_pwd.length < 6 ){
common_ops.tip( "请输入符合规范的登录密码~~",login_pwd_target );
return false;
}
btn_target.addClass("disabled");
var data = {
nickname: nickname,
mobile: mobile,
email: email,
login_name:login_name,
login_pwd:login_pwd,
id:$(".wrap_account_set input[name=id]").val()
};
$.ajax({
url:common_ops.buildUrl( "/account/set" ),
type:'POST',
data:data,
dataType:'json',
success:function( res ){
btn_target.removeClass("disabled");
var callback = null;
if( res.code == 200 ){
callback = function(){
window.location.href = common_ops.buildUrl("/account/index");
}
}
common_ops.alert( res.msg,callback );
}
});
});
}
};
$(document).ready( function(){
account_set_ops.init();
} );

View File

@@ -1,16 +1,6 @@
{% extends "common/layout_main.html" %}
{% block content %}
<div class="row border-bottom">
<div class="col-lg-12">
<div class="tab_title">
<ul class="nav nav-pills">
<li class="current">
<a href="{{ buildUrl('/account/index') }}">账户列表</a>
</li>
</ul>
</div>
</div>
</div>
{% include "common/tab_account.html" %}
<div class="row">
<div class="col-lg-12">
<form class="form-inline wrap_search">
@@ -18,15 +8,17 @@
<div class="form-group">
<select name="status" class="form-control inline">
<option value="-1">请选择状态</option>
<option value="1">正常</option>
<option value="0">已删除</option>
{% for tmp_key in status_mapping %}
<option value="{{tmp_key}}" {% if tmp_key==search_con['status'] %} selected {% endif %}>{{ status_mapping[ tmp_key] }}</option>
{% endfor %}
</select>
</div>
<div class="form-group">
<div class="input-group">
<input type="text" name="mix_kw" placeholder="请输入姓名或者手机号码" class="form-control" value="">
<input type="hidden" name="p" value="1">
<input type="text" name="mix_kw" placeholder="请输入姓名或者手机号码" class="form-control" value="{{ search_con['mix_kw']}}">
<input type="hidden" name="p" value="{{ search_con['p']}}">
<span class="input-group-btn">
<button type="button" class="btn btn-primary search">
<i class="fa fa-search"></i>搜索
@@ -96,3 +88,6 @@
</div>
</div>
{% endblock %}
{% block js %}
<script src="{{ buildStaticUrl('/js/account/index.js') }}"></script>
{% endblock %}

View File

@@ -1,16 +1,6 @@
{% extends "common/layout_main.html" %}
{% block content %}
<div class="row border-bottom">
<div class="col-lg-12">
<div class="tab_title">
<ul class="nav nav-pills">
<li class="current">
<a href="{{ buildUrl('/account/index') }}">账户列表</a>
</li>
</ul>
</div>
</div>
</div>
{% include "common/tab_account.html" %}
<div class="row m-t wrap_account_set">
<div class="col-lg-12">
<h2 class="text-center">账号设置</h2>
@@ -18,41 +8,41 @@
<div class="form-group">
<label class="col-lg-2 control-label">姓名:</label>
<div class="col-lg-10">
<input type="text" name="nickname" class="form-control" placeholder="请输入姓名~~" value="">
<input type="text" name="nickname" class="form-control" placeholder="请输入姓名~~" value="{{ info.nickname}}">
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<label class="col-lg-2 control-label">手机:</label>
<div class="col-lg-10">
<input type="text" name="mobile" class="form-control" placeholder="请输入手机~~" value="">
<input type="text" name="mobile" class="form-control" placeholder="请输入手机~~" value="{{ info.mobile}}">
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<label class="col-lg-2 control-label">邮箱:</label>
<div class="col-lg-10">
<input type="text" name="email" class="form-control" placeholder="请输入邮箱~~" value="">
<input type="text" name="email" class="form-control" placeholder="请输入邮箱~~" value="{{ info.email}}">
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<label class="col-lg-2 control-label">登录名:</label>
<div class="col-lg-10">
<input type="text" name="login_name" class="form-control" autocomplete="off" placeholder="请输入登录名~~" value="">
<input type="text" name="login_name" class="form-control" autocomplete="off" placeholder="请输入登录名~~" value="{{ info.login_name}}">
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<label class="col-lg-2 control-label">登录密码:</label>
<div class="col-lg-10">
<input type="password" name="login_pwd" class="form-control" autocomplete="new-password" placeholder="请输入登录密码~~" value="">
<input type="password" name="login_pwd" class="form-control" autocomplete="new-password" placeholder="请输入登录密码~~" value="******">
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<div class="col-lg-4 col-lg-offset-2">
<input type="hidden" name="id" value="0">
<input type="hidden" name="id" value="{{ info.uid}}">
<button class="btn btn-w-m btn-outline btn-primary save">保存</button>
</div>
</div>
@@ -60,3 +50,6 @@
</div>
</div>
{% endblock %}
{% block js %}
<script src="{{ buildStaticUrl('/js/account/set.js') }}"></script>
{% endblock %}

1
www.py
View File

@@ -5,6 +5,7 @@ from application import app
统一拦截处理和统一错误处理
'''
from web.interceptors.AuthInterceptor import *
from web.interceptors.ErrorInterceptor import *
'''
蓝图功能对所有的url进行蓝图功能配置