python学习

This commit is contained in:
2019-07-31 17:12:55 +08:00
parent 04327fbd47
commit f87f5ca73a
13 changed files with 841 additions and 317 deletions

602
.idea/workspace.xml generated
View File

@@ -2,23 +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$/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 afterPath="$PROJECT_DIR$/comm" afterDir="false" />
<change afterPath="$PROJECT_DIR$/common/models/member/Member.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/common/models/member/Oauth_member_bind.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/mina/sitemap.json" afterDir="false" />
<change afterPath="$PROJECT_DIR$/web/controllers/api/Member.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/web/controllers/api/__init__.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/数据库文件/food.sql" afterDir="false" />
<change afterPath="$PROJECT_DIR$/数据库文件/后台初始账户.sql" afterDir="false" />
<change afterPath="$PROJECT_DIR$/数据库文件/自动生成models.txt" 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$/mina" beforeDir="false" afterPath="$PROJECT_DIR$/mina" afterDir="false" />
<change beforePath="$PROJECT_DIR$/mina/app.js" beforeDir="false" afterPath="$PROJECT_DIR$/mina/app.js" afterDir="false" />
<change beforePath="$PROJECT_DIR$/mina/app.json" beforeDir="false" afterPath="$PROJECT_DIR$/mina/app.json" afterDir="false" />
<change beforePath="$PROJECT_DIR$/mina/pages/index/index.js" beforeDir="false" afterPath="$PROJECT_DIR$/mina/pages/index/index.js" afterDir="false" />
<change beforePath="$PROJECT_DIR$/mina/pages/index/index.wxml" beforeDir="false" afterPath="$PROJECT_DIR$/mina/pages/index/index.wxml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/mina/project.config.json" beforeDir="false" afterPath="$PROJECT_DIR$/mina/project.config.json" 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/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" />
@@ -30,87 +31,73 @@
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/web/interceptors/AuthInterceptor.py">
<entry file="file://$PROJECT_DIR$/mina/pages/index/index.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="372">
<caret line="30" lean-forward="true" selection-start-line="30" selection-end-line="30" />
<state relative-caret-position="346">
<caret line="62" column="30" lean-forward="true" selection-start-line="62" selection-start-column="30" selection-end-line="62" selection-end-column="30" />
<folding>
<element signature="e#24#51#0" expanded="true" />
<element signature="e#0#1517#0" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/web/interceptors/ErrorInterceptor.py">
<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="248">
<caret line="8" column="10" selection-start-line="8" selection-start-column="10" selection-end-line="8" selection-end-column="10" />
<state relative-caret-position="204">
<caret line="9" column="19" lean-forward="true" selection-start-line="9" selection-start-column="19" selection-end-line="9" selection-end-column="19" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/web/controllers/api/Member.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="208">
<caret line="52" lean-forward="true" selection-start-line="52" selection-end-line="52" />
<folding>
<element signature="e#24#52#0" expanded="true" />
<element signature="e#24#65#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/common/models/member/Member.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="93">
<caret line="3" selection-start-line="3" selection-end-line="3" selection-end-column="26" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/common/models/member/Oauth_member_bind.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="155">
<caret line="5" lean-forward="true" selection-start-line="5" selection-end-line="5" />
<folding>
<element signature="e#16#85#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/common/models/User.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="93">
<caret line="3" selection-start-line="3" selection-end-line="3" selection-end-column="26" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<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>
</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>
</file>
<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 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>
</state>
</provider>
</entry>
</file>
<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 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 relative-caret-position="651">
<caret line="21" column="41" lean-forward="true" selection-start-line="21" selection-start-column="41" selection-end-line="21" selection-end-column="41" />
</state>
</provider>
</entry>
@@ -118,17 +105,22 @@
<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="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 relative-caret-position="248">
<caret line="8" lean-forward="true" selection-start-line="8" selection-end-line="8" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/web/static/js/account/index.js">
<entry file="file://$PROJECT_DIR$/mina/pages/index/index.json">
<provider selected="true" editor-type-id="text-editor" />
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/mina/pages/index/index.wxml">
<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 relative-caret-position="312">
<caret line="21" column="84" selection-start-line="21" selection-start-column="84" selection-end-line="21" selection-end-column="84" />
</state>
</provider>
</entry>
@@ -155,6 +147,7 @@
<find>ajax</find>
<find>账户</find>
<find>请输入姓名</find>
<find>getRequestHeader</find>
</findStrings>
<replaceStrings>
<replace>ops_render</replace>
@@ -190,20 +183,28 @@
<option value="$PROJECT_DIR$/web/controllers/finance/Finance.py" />
<option value="$PROJECT_DIR$/web/static/js/user/edit.js" />
<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/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$/web/templates/account/info.html" />
<option value="$PROJECT_DIR$/web/controllers/account/Account.py" />
<option value="$PROJECT_DIR$/mina/pages/index/index.wxml" />
<option value="$PROJECT_DIR$/web/controllers/api/__init__.py" />
<option value="$PROJECT_DIR$/www.py" />
<option value="$PROJECT_DIR$/mina/app.js" />
<option value="$PROJECT_DIR$/mina/pages/index/index.js" />
<option value="$PROJECT_DIR$/config/local_setting.py" />
<option value="$PROJECT_DIR$/config/base_setting.py" />
<option value="$PROJECT_DIR$/数据库文件/自动生成models.txt" />
<option value="$PROJECT_DIR$/common/models/member/Member.py" />
<option value="$PROJECT_DIR$/common/models/member/Oauth_member_bind.py" />
<option value="$PROJECT_DIR$/web/controllers/api/Member.py" />
</list>
</option>
</component>
@@ -217,9 +218,9 @@
<packageJsonPaths />
</component>
<component name="ProjectFrameBounds">
<option name="x" value="960" />
<option name="y" value="20" />
<option name="width" value="958" />
<option name="x" value="1028" />
<option name="y" value="49" />
<option name="width" value="887" />
<option name="height" value="939" />
</component>
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
@@ -246,13 +247,6 @@
<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" />
@@ -264,13 +258,31 @@
<item name="order" type="462c0819:PsiDirectoryNode" />
<item name="common" type="462c0819:PsiDirectoryNode" />
<item name="models" type="462c0819:PsiDirectoryNode" />
<item name="log" type="462c0819:PsiDirectoryNode" />
<item name="member" 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="mina" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="order" type="b2602c69:ProjectViewProjectNode" />
<item name="order" type="462c0819:PsiDirectoryNode" />
<item name="mina" type="462c0819:PsiDirectoryNode" />
<item name="pages" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="order" type="b2602c69:ProjectViewProjectNode" />
<item name="order" type="462c0819:PsiDirectoryNode" />
<item name="mina" type="462c0819:PsiDirectoryNode" />
<item name="pages" type="462c0819:PsiDirectoryNode" />
<item name="index" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="order" type="b2602c69:ProjectViewProjectNode" />
<item name="order" type="462c0819:PsiDirectoryNode" />
@@ -287,68 +299,12 @@
<item name="order" type="462c0819:PsiDirectoryNode" />
<item name="web" type="462c0819:PsiDirectoryNode" />
<item name="controllers" type="462c0819:PsiDirectoryNode" />
<item name="account" type="462c0819:PsiDirectoryNode" />
<item name="api" 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" />
<item name="web" type="462c0819:PsiDirectoryNode" />
<item name="templates" 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="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="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" />
<item name="数据库文件" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="order" type="b2602c69:ProjectViewProjectNode" />
@@ -364,7 +320,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" />
<property name="last_opened_file_path" value="$PROJECT_DIR$/数据库文件" />
<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" />
@@ -375,11 +331,11 @@
</component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="D:\order\数据库文件" />
<recent name="D:\order" />
<recent name="D:\order\web\controllers\api" />
<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\web\static\js\account" />
</key>
<key name="MoveFile.RECENT_KEYS">
<recent name="D:\order\common\libs" />
@@ -474,7 +430,14 @@
<option name="project" value="LOCAL" />
<updated>1563790035610</updated>
</task>
<option name="localTasksCounter" value="10" />
<task id="LOCAL-00010" summary="python学习">
<created>1564385286785</created>
<option name="number" value="00010" />
<option name="presentableId" value="LOCAL-00010" />
<option name="project" value="LOCAL" />
<updated>1564385286785</updated>
</task>
<option name="localTasksCounter" value="11" />
<servers />
</component>
<component name="TodoView">
@@ -487,9 +450,9 @@
</todo-panel>
</component>
<component name="ToolWindowManager">
<frame x="960" y="20" width="958" height="939" extended-state="0" />
<frame x="1028" y="49" width="887" height="939" extended-state="0" />
<layout>
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.27173913" />
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.29446408" />
<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" />
@@ -504,7 +467,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.29404467" />
<window_info anchor="bottom" id="Terminal" order="9" visible="true" weight="0.27791563" />
<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" />
@@ -528,79 +491,6 @@
<option name="LAST_COMMIT_MESSAGE" value="python学习" />
</component>
<component name="editorHistoryManager">
<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">
<caret line="86" selection-start-line="86" selection-end-line="86" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/venv/Lib/site-packages/sqlalchemy/engine/__init__.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="166">
<caret line="434" selection-start-line="434" selection-end-line="434" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/venv/Lib/site-packages/flask/app.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="166">
<caret line="1934" selection-start-line="1934" selection-end-line="1934" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/requirements.txt">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="93">
<caret line="3" selection-start-line="3" selection-end-line="3" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/common/libs/user/__init__.py">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/config/__init__.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="31">
<caret line="1" selection-start-line="1" selection-end-line="1" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/common/models/__init__.py">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/common/__init__.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="62">
<caret line="2" column="28" lean-forward="true" selection-start-line="2" selection-start-column="28" selection-end-line="2" selection-end-column="28" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/web/static/js/common.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="237">
<caret line="140" column="6" selection-start-line="140" selection-start-column="6" selection-end-line="140" selection-end-column="6" />
</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$/README.en.md" />
<entry file="file://$PROJECT_DIR$/web/interceptors/ApiAuthInterceptor.py" />
<entry file="file://$PROJECT_DIR$/readme.md">
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
<state split_layout="SPLIT">
<first_editor />
<second_editor />
</state>
</provider>
<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>
<entry file="file://$PROJECT_DIR$/web/controllers/stat/Stat.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="145">
@@ -733,23 +623,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">
@@ -757,13 +630,6 @@
</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="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">
@@ -771,13 +637,6 @@
</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">
@@ -799,36 +658,7 @@
</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 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>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/common/models/AppAccessLog.py" />
<entry file="file://$PROJECT_DIR$/common/models/log/AppErrorLog.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="215">
@@ -839,9 +669,66 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/web/interceptors/AuthInterceptor.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="558">
<caret line="26" column="21" selection-start-line="26" selection-start-column="15" selection-end-line="26" selection-end-column="27" />
<folding>
<element signature="e#24#51#0" expanded="true" />
</folding>
</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="1612">
<caret line="58" selection-start-line="58" selection-end-line="58" />
<folding>
<element signature="e#24#76#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/common/models/log/AppAccessLog.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="310">
<caret line="12" column="14" selection-start-line="12" selection-start-column="4" selection-end-line="12" selection-end-column="14" />
<folding>
<element signature="e#16#90#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="1612">
<caret line="52" column="55" selection-start-line="52" selection-start-column="51" selection-end-line="52" selection-end-column="55" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/web/interceptors/ErrorInterceptor.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="186">
<caret line="8" column="21" selection-start-line="8" selection-start-column="21" selection-end-line="8" selection-end-column="21" />
<folding>
<element signature="e#24#52#0" expanded="true" />
</folding>
</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="1209">
<caret line="39" column="9" lean-forward="true" selection-start-line="39" selection-start-column="9" selection-end-line="86" selection-end-column="46" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/web/templates/error/error.html">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/common/libs/UrlManager.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="496">
<state relative-caret-position="465">
<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" />
@@ -849,42 +736,129 @@
</state>
</provider>
</entry>
<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">
<entry file="file://$PROJECT_DIR$/common/libs/LogService.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="372">
<caret line="30" lean-forward="true" selection-start-line="30" selection-end-line="30" />
<state relative-caret-position="80">
<caret line="10" column="8" selection-start-line="10" selection-start-column="8" selection-end-line="10" selection-end-column="8" />
<folding>
<element signature="e#24#51#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/common/libs/LogService.py">
<entry file="file://$PROJECT_DIR$/mina/project.config.json">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/manager.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" />
<state relative-caret-position="248">
<caret line="10" selection-start-line="10" selection-end-line="10" />
<folding>
<element signature="e#24#51#0" expanded="true" />
<element signature="e#24#59#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/web/controllers/api/__init__.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="62">
<caret line="2" column="22" selection-start-line="2" selection-start-column="22" selection-end-line="2" selection-end-column="22" />
</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 relative-caret-position="651">
<caret line="21" column="41" lean-forward="true" selection-start-line="21" selection-start-column="41" selection-end-line="21" selection-end-column="41" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/web/interceptors/ErrorInterceptor.py">
<entry file="file://$PROJECT_DIR$/mina/pages/index/index.wxml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="312">
<caret line="21" column="84" selection-start-line="21" selection-start-column="84" selection-end-line="21" selection-end-column="84" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/mina/pages/index/index.json">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/mina/app.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-837" />
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/mina/app.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="279">
<caret line="9" column="6" lean-forward="true" selection-start-line="9" selection-start-column="6" selection-end-line="9" selection-end-column="6" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/mina/pages/index/index.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="346">
<caret line="62" column="30" lean-forward="true" selection-start-line="62" selection-start-column="30" selection-end-line="62" selection-end-column="30" />
<folding>
<element signature="e#0#1517#0" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/config/local_setting.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" />
<caret line="8" lean-forward="true" selection-start-line="8" selection-end-line="8" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/config/base_setting.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="204">
<caret line="9" column="19" lean-forward="true" selection-start-line="9" selection-start-column="19" selection-end-line="9" selection-end-column="19" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/数据库文件/自动生成models.txt">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="31">
<caret line="1" lean-forward="true" selection-start-line="1" selection-end-line="1" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/数据库文件/food.sql">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/common/models/User.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="93">
<caret line="3" selection-start-line="3" selection-end-line="3" selection-end-column="26" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/common/models/member/Member.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="93">
<caret line="3" selection-start-line="3" selection-end-line="3" selection-end-column="26" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/common/models/member/Oauth_member_bind.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="155">
<caret line="5" lean-forward="true" selection-start-line="5" selection-end-line="5" />
<folding>
<element signature="e#24#52#0" expanded="true" />
<element signature="e#16#85#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/web/controllers/api/Member.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="208">
<caret line="52" lean-forward="true" selection-start-line="52" selection-end-line="52" />
<folding>
<element signature="e#24#65#0" expanded="true" />
</folding>
</state>
</provider>

25
comm Normal file
View File

@@ -0,0 +1,25 @@
# coding: utf-8
from sqlalchemy import BigInteger, Column, DateTime, Integer, String
from sqlalchemy.schema import FetchedValue
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
metadata = Base.metadata
class User(Base):
__tablename__ = 'user'
uid = Column(BigInteger, primary_key=True)
nickname = Column(String(100), nullable=False, server_default=FetchedValue())
mobile = Column(String(20), nullable=False, server_default=FetchedValue())
email = Column(String(100), nullable=False, server_default=FetchedValue())
sex = Column(Integer, nullable=False, server_default=FetchedValue())
avatar = Column(String(64), nullable=False, server_default=FetchedValue())
login_name = Column(String(20), nullable=False, unique=True, server_default=FetchedValue())
login_pwd = Column(String(32), nullable=False, server_default=FetchedValue())
login_salt = Column(String(32), nullable=False, server_default=FetchedValue())
status = Column(Integer, nullable=False, server_default=FetchedValue())
updated_time = Column(DateTime, nullable=False, server_default=FetchedValue())
created_time = Column(DateTime, nullable=False, server_default=FetchedValue())

View File

@@ -0,0 +1,19 @@
# coding: utf-8
from sqlalchemy import Column, DateTime, Integer, String
from sqlalchemy.schema import FetchedValue
from application import db
class Member(db.Model):
__tablename__ = 'member'
id = db.Column(db.Integer, primary_key=True)
nickname = db.Column(db.String(100), nullable=False, server_default=db.FetchedValue())
mobile = db.Column(db.String(11), nullable=False, server_default=db.FetchedValue())
sex = db.Column(db.Integer, nullable=False, server_default=db.FetchedValue())
avatar = db.Column(db.String(200), nullable=False, server_default=db.FetchedValue())
salt = db.Column(db.String(32), nullable=False, server_default=db.FetchedValue())
reg_ip = db.Column(db.String(100), nullable=False, server_default=db.FetchedValue())
status = db.Column(db.Integer, nullable=False, server_default=db.FetchedValue())
updated_time = db.Column(db.DateTime, nullable=False, server_default=db.FetchedValue())
created_time = db.Column(db.DateTime, nullable=False, server_default=db.FetchedValue())

View File

@@ -0,0 +1,21 @@
# coding: utf-8
from sqlalchemy import Column, DateTime, Index, Integer, String, Text
from sqlalchemy.schema import FetchedValue
from application import db
class OauthMemberBind(db.Model):
__tablename__ = 'oauth_member_bind'
__table_args__ = (
db.Index('idx_type_openid', 'type', 'openid'),
)
id = db.Column(db.Integer, primary_key=True)
member_id = db.Column(db.Integer, nullable=False, server_default=db.FetchedValue())
client_type = db.Column(db.String(20), nullable=False, server_default=db.FetchedValue())
type = db.Column(db.Integer, nullable=False, server_default=db.FetchedValue())
openid = db.Column(db.String(80), nullable=False, server_default=db.FetchedValue())
unionid = db.Column(db.String(100), nullable=False, server_default=db.FetchedValue())
extra = db.Column(db.Text, nullable=False)
updated_time = db.Column(db.DateTime, nullable=False, server_default=db.FetchedValue())
created_time = db.Column(db.DateTime, nullable=False, server_default=db.FetchedValue())

View File

@@ -7,7 +7,8 @@ AUTH_COOKIE_NAME = "mooc_food"
##过滤url
IGNORE_URLS = [
"^/user/login"
"^/user/login",
"^/api"
]
IGNORE_CHECK_LOGIN_URLS = [
@@ -15,10 +16,21 @@ IGNORE_CHECK_LOGIN_URLS = [
"^/favicon.ico"
]
PAGE_SIZE = 50
PAGE_DISPLAY = 10
STATUS_MAPPING = {
"1":"正常",
"0":"已删除"
}
MINA_APP = {
'appid':'wx2c65877d37fc29bf',
'appkey':'8c61791794cde415042924a9714542a9',
'paykey':'xxxxxxxxxxxxxx换自己的',
'mch_id':'xxxxxxxxxxxx换自己的',
'callback_url':'/api/order/callback'
}

2
mina

Submodule mina updated: 47c5b15aed...14a30e11ab

View File

@@ -53,7 +53,9 @@ def info():
if not info:
return redirect(reback_url)
access_list = AppAccessLog.query.filter_by(uid=uid).order_by(AppAccessLog.id.desc()).limit(10).all()
resp_data['info'] = info
resp_data['access_list'] = access_list
return ops_render("account/info.html", resp_data)

View File

@@ -0,0 +1,58 @@
# -*- coding: utf-8 -*-
from web.controllers.api import route_api
from flask import request,jsonify
from application import app,db
import requests,json
from common.models.member.Member import Member
from common.models.member.Oauth_member_bind import OauthMemberBind
from common.libs.Helper import getCurrentDate
@route_api.route("/member/login",methods = [ "GET","POST" ])
def login():
resp = {'code': 200, 'msg': '操作成功~', 'data': {}}
req = request.values
code = req['code'] if 'code' in req else ''
app.logger.info(code)
if not code or len(code) < 1:
resp['code'] = -1
resp['msg'] = "需要code"
return jsonify(resp)
url = "https://api.weixin.qq.com/sns/jscode2session?appid={0}&secret={1}&js_code={2}&grant_type=authorization_code" \
.format(app.config['MINA_APP']['appid'], app.config['MINA_APP']['appkey'], code)
r = requests.get(url)
res = json.loads(r.text)
openid = res['openid']
nickname = req['nickName'] if 'nickName' in req else ''
sex = req['gender'] if 'gender' in req else 0
avatar = req['avatarUrl'] if 'avatarUrl' in req else ''
'''
判断是否已经测试过,注册了直接返回一些信息
'''
bind_info = OauthMemberBind.query.filter_by(openid=openid, type=1).first()
if not bind_info:
model_member = Member()
model_member.nickname = nickname
model_member.sex = sex
model_member.avatar = avatar
model_member.salt = ''
model_member.updated_time = model_member.created_time = getCurrentDate()
db.session.add(model_member)
db.session.commit()
model_bind = OauthMemberBind()
model_bind.member_id = model_member.id
model_bind.type = 1
model_bind.openid = openid
model_bind.extra = ''
model_bind.updated_time = model_bind.created_time = getCurrentDate()
db.session.add(model_bind)
db.session.commit()
bind_info = model_bind
member_info = Member.query.filter_by(id=bind_info.member_id).first()
resp['code'] = 200
resp['data'] = {'nickname': member_info.nickname}
return jsonify(resp)

View File

@@ -0,0 +1,8 @@
# -*- coding: utf-8 -*-
from flask import Blueprint
route_api = Blueprint('api_page',__name__ )
from web.controllers.api.Member import *
@route_api.route("/")
def index():
return "Mina Api V1.0~~"

3
www.py
View File

@@ -19,7 +19,7 @@ from web.controllers.finance.Finance import route_finance
from web.controllers.food.Food import route_food
from web.controllers.member.Member import route_member
from web.controllers.stat.Stat import route_stat
from web.controllers.api import route_api
app.register_blueprint( route_index,url_prefix = "/" )
app.register_blueprint( route_user,url_prefix = "/user" )
app.register_blueprint( route_static,url_prefix = "/static" )
@@ -28,3 +28,4 @@ app.register_blueprint(route_finance,url_prefix="/finance")
app.register_blueprint(route_member,url_prefix="/member")
app.register_blueprint(route_food,url_prefix="/food")
app.register_blueprint(route_stat,url_prefix="/stat")
app.register_blueprint( route_api,url_prefix = "/api" )

398
数据库文件/food.sql Normal file
View File

@@ -0,0 +1,398 @@
CREATE DATABASE `food_db` DEFAULT CHARACTER SET = `utf8mb4`;
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`uid` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户uid',
`nickname` varchar(100) NOT NULL DEFAULT '' COMMENT '用户名',
`mobile` varchar(20) NOT NULL DEFAULT '' COMMENT '手机号码',
`email` varchar(100) NOT NULL DEFAULT '' COMMENT '邮箱地址',
`sex` tinyint(1) NOT NULL DEFAULT '0' COMMENT '1男 2女 0没填写',
`avatar` varchar(64) NOT NULL DEFAULT '' COMMENT '头像',
`login_name` varchar(20) NOT NULL DEFAULT '' COMMENT '登录用户名',
`login_pwd` varchar(32) NOT NULL DEFAULT '' COMMENT '登录密码',
`login_salt` varchar(32) NOT NULL DEFAULT '' COMMENT '登录密码的随机加密秘钥',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1有效 0无效',
`updated_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后一次更新时间',
`created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '插入时间',
PRIMARY KEY (`uid`),
UNIQUE KEY `login_name` (`login_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表(管理员)';
DROP TABLE IF EXISTS `app_access_log`;
CREATE TABLE `app_access_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`uid` bigint(20) NOT NULL DEFAULT '0' COMMENT 'uid',
`referer_url` varchar(255) NOT NULL DEFAULT '' COMMENT '当前访问的refer',
`target_url` varchar(255) NOT NULL DEFAULT '' COMMENT '访问的url',
`query_params` text NOT NULL COMMENT 'get和post参数',
`ua` varchar(255) NOT NULL DEFAULT '' COMMENT '访问ua',
`ip` varchar(32) NOT NULL DEFAULT '' COMMENT '访问ip',
`note` varchar(1000) NOT NULL DEFAULT '' COMMENT 'json格式备注字段',
`created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_uid` (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户访问记录表';
DROP TABLE IF EXISTS `app_error_log`;
CREATE TABLE `app_error_log` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`referer_url` varchar(255) NOT NULL DEFAULT '' COMMENT '当前访问的refer',
`target_url` varchar(255) NOT NULL DEFAULT '' COMMENT '访问的url',
`query_params` text NOT NULL COMMENT 'get和post参数',
`content` longtext NOT NULL COMMENT '日志内容',
`created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '插入时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='app错误日表';
DROP TABLE IF EXISTS `member`;
CREATE TABLE `member` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`nickname` varchar(100) NOT NULL DEFAULT '' COMMENT '会员名',
`mobile` varchar(11) NOT NULL DEFAULT '' COMMENT '会员手机号码',
`sex` tinyint(1) NOT NULL DEFAULT '0' COMMENT '性别 1男 2',
`avatar` varchar(200) NOT NULL DEFAULT '' COMMENT '会员头像',
`salt` varchar(32) NOT NULL DEFAULT '' COMMENT '随机salt',
`reg_ip` varchar(100) NOT NULL DEFAULT '' COMMENT '注册ip',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态 1有效 0无效',
`updated_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后一次更新时间',
`created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '插入时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='会员表';
DROP TABLE IF EXISTS `oauth_member_bind`;
CREATE TABLE `oauth_member_bind` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`member_id` int(11) NOT NULL DEFAULT '0' COMMENT '会员id',
`client_type` varchar(20) NOT NULL DEFAULT '' COMMENT '客户端来源类型。qq,weibo,weixin',
`type` tinyint(3) NOT NULL DEFAULT '0' COMMENT '类型 type 1:wechat ',
`openid` varchar(80) NOT NULL DEFAULT '' COMMENT '第三方id',
`unionid` varchar(100) NOT NULL DEFAULT '',
`extra` text NOT NULL COMMENT '额外字段',
`updated_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后更新时间',
`created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '插入时间',
PRIMARY KEY (`id`),
KEY `idx_type_openid` (`type`,`openid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='第三方登录绑定关系';
DROP TABLE IF EXISTS `food`;
CREATE TABLE `food` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`cat_id` int(11) NOT NULL DEFAULT '0' COMMENT '分类id',
`name` varchar(100) NOT NULL DEFAULT '' COMMENT '书籍名称',
`price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '售卖金额',
`main_image` varchar(100) NOT NULL DEFAULT '' COMMENT '主图',
`summary` varchar(10000) NOT NULL DEFAULT '' COMMENT '描述',
`stock` int(11) NOT NULL DEFAULT '0' COMMENT '库存量',
`tags` varchar(200) NOT NULL DEFAULT '' COMMENT 'tag关键字以","连接',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态 1有效 0无效',
`month_count` int(11) NOT NULL DEFAULT '0' COMMENT '月销售数量',
`total_count` int(11) NOT NULL DEFAULT '0' COMMENT '总销售量',
`view_count` int(11) NOT NULL DEFAULT '0' COMMENT '总浏览次数',
`comment_count` int(11) NOT NULL DEFAULT '0' COMMENT '总评论量',
`updated_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后更新时间',
`created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后插入时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='食品表';
DROP TABLE IF EXISTS `food_cat`;
CREATE TABLE `food_cat` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL DEFAULT '' COMMENT '类别名称',
`weight` tinyint(4) NOT NULL DEFAULT '1' COMMENT '权重',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态 1有效 0无效',
`updated_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后一次更新时间',
`created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '插入时间',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_name` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='食品分类';
DROP TABLE IF EXISTS `food_sale_change_log`;
CREATE TABLE `food_sale_change_log` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`food_id` int(11) NOT NULL DEFAULT '0' COMMENT '商品id',
`quantity` int(11) NOT NULL DEFAULT '0' COMMENT '售卖数量',
`price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '售卖金额',
`member_id` int(11) NOT NULL DEFAULT '0' COMMENT '会员id',
`created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '售卖时间',
PRIMARY KEY (`id`),
KEY `idx_food_id_id` (`food_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品销售情况';
DROP TABLE IF EXISTS `food_stock_change_log`;
CREATE TABLE `food_stock_change_log` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`food_id` int(11) NOT NULL COMMENT '商品id',
`unit` int(11) NOT NULL DEFAULT '0' COMMENT '变更多少',
`total_stock` int(11) NOT NULL DEFAULT '0' COMMENT '变更之后总量',
`note` varchar(100) NOT NULL DEFAULT '' COMMENT '备注字段',
`created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '插入时间',
PRIMARY KEY (`id`),
KEY `idx_food_id` (`food_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='数据库存变更表';
DROP TABLE IF EXISTS `images`;
CREATE TABLE `images` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`file_key` varchar(60) NOT NULL DEFAULT '' COMMENT '文件名',
`created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '插入时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
DROP TABLE IF EXISTS `member_address`;
CREATE TABLE `member_address` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`member_id` int(11) NOT NULL DEFAULT '0' COMMENT '会员id',
`nickname` varchar(20) NOT NULL DEFAULT '' COMMENT '收货人姓名',
`mobile` varchar(11) NOT NULL DEFAULT '' COMMENT '收货人手机号码',
`province_id` int(11) NOT NULL DEFAULT '0' COMMENT '省id',
`province_str` varchar(50) NOT NULL DEFAULT '' COMMENT '省名称',
`city_id` int(11) NOT NULL DEFAULT '0' COMMENT '城市id',
`city_str` varchar(50) NOT NULL DEFAULT '' COMMENT '市名称',
`area_id` int(11) NOT NULL DEFAULT '0' COMMENT '区域id',
`area_str` varchar(50) NOT NULL DEFAULT '' COMMENT '区域名称',
`address` varchar(100) NOT NULL DEFAULT '' COMMENT '详细地址',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否有效 1有效 0无效',
`is_default` TINYINT(1) NOT NULL DEFAULT '0' COMMENT '默认地址',
`updated_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后一次更新时间',
`created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '插入时间',
PRIMARY KEY (`id`),
KEY `idx_member_id_status` (`member_id`,`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='会员收货地址';
DROP TABLE IF EXISTS `member_cart`;
CREATE TABLE `member_cart` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`member_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '会员id',
`food_id` int(11) NOT NULL DEFAULT '0' COMMENT '商品id',
`quantity` int(11) NOT NULL DEFAULT '0' COMMENT '数量',
`updated_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后一次更新时间',
`created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '插入时间',
PRIMARY KEY (`id`),
KEY `idx_member_id` (`member_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='购物车';
DROP TABLE IF EXISTS `wx_share_history`;
CREATE TABLE `wx_share_history` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`member_id` int(11) NOT NULL DEFAULT '0' COMMENT '会员id',
`share_url` varchar(200) NOT NULL DEFAULT '' COMMENT '分享的页面url',
`created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='微信分享记录';
DROP TABLE IF EXISTS `member_comments`;
CREATE TABLE `member_comments` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`member_id` int(11) NOT NULL DEFAULT '0' COMMENT '会员id',
`food_ids` varchar(200) NOT NULL DEFAULT '' COMMENT '商品ids',
`pay_order_id` int(11) NOT NULL DEFAULT '0' COMMENT '订单id',
`score` tinyint(4) NOT NULL DEFAULT '0' COMMENT '评分',
`content` varchar(200) NOT NULL DEFAULT '' COMMENT '评论内容',
`created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '插入时间',
PRIMARY KEY (`id`),
KEY `idx_member_id` (`member_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='会员评论表';
DROP TABLE IF EXISTS `pay_order`;
CREATE TABLE `pay_order` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`order_sn` varchar(40) NOT NULL DEFAULT '' COMMENT '随机订单号',
`member_id` bigint(11) NOT NULL DEFAULT '0' COMMENT '会员id',
`total_price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '订单应付金额',
`yun_price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '运费金额',
`pay_price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '订单实付金额',
`pay_sn` varchar(128) NOT NULL DEFAULT '' COMMENT '第三方流水号',
`prepay_id` varchar(128) NOT NULL DEFAULT '' COMMENT '第三方预付id',
`note` text NOT NULL COMMENT '备注信息',
`status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '1支付完成 0 无效 -1 申请退款 -2 退款中 -9 退款成功 -8 待支付 -7 完成支付待确认',
`express_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '快递状态,-8 待支付 -7 已付款待发货 1确认收货 0失败',
`express_address_id` int(11) NOT NULL DEFAULT '0' COMMENT '快递地址id',
`express_info` varchar(1000) NOT NULL DEFAULT '' COMMENT '快递信息',
`comment_status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '评论状态',
`pay_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '付款到账时间',
`updated_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最近一次更新时间',
`created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '插入时间',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_order_sn` (`order_sn`),
KEY `idx_member_id_status` (`member_id`,`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='在线购买订单表';
DROP TABLE IF EXISTS `pay_order_item`;
CREATE TABLE `pay_order_item` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`pay_order_id` int(11) NOT NULL DEFAULT '0' COMMENT '订单id',
`member_id` bigint(11) NOT NULL DEFAULT '0' COMMENT '会员id',
`quantity` int(11) NOT NULL DEFAULT '1' COMMENT '购买数量 默认1份',
`price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '商品总价格,售价 * 数量',
`food_id` int(11) NOT NULL DEFAULT '0' COMMENT '美食表id',
`note` text NOT NULL COMMENT '备注信息',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态1成功 0 失败',
`updated_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最近一次更新时间',
`created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '插入时间',
PRIMARY KEY (`id`),
KEY `id_order_id` (`pay_order_id`),
KEY `idx_food_id` (`food_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单详情表';
DROP TABLE IF EXISTS `pay_order_callback_data`;
CREATE TABLE `pay_order_callback_data` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pay_order_id` int(11) NOT NULL DEFAULT '0' COMMENT '支付订单id',
`pay_data` text NOT NULL COMMENT '支付回调信息',
`refund_data` text NOT NULL COMMENT '退款回调信息',
`updated_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后一次更新时间',
`created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `pay_order_id` (`pay_order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
DROP TABLE IF EXISTS `queue_list`;
CREATE TABLE `queue_list` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`queue_name` varchar(30) NOT NULL DEFAULT '' COMMENT '队列名字',
`data` varchar(500) NOT NULL DEFAULT '' COMMENT '队列数据',
`status` tinyint(1) NOT NULL DEFAULT '-1' COMMENT '状态 -1 待处理 1 已处理',
`updated_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后一次更新时间',
`created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '插入时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='事件队列表';
DROP TABLE IF EXISTS `oauth_access_token`;
CREATE TABLE `oauth_access_token` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`access_token` varchar(600) NOT NULL DEFAULT '',
`expired_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '过期时间',
`created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '插入时间',
PRIMARY KEY (`id`),
KEY `idx_expired_time` (`expired_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='微信的access_token 用户调用其他接口的';
DROP TABLE IF EXISTS `stat_daily_food`;
CREATE TABLE `stat_daily_food` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`date` date NOT NULL,
`food_id` int(11) NOT NULL DEFAULT '0' COMMENT '菜品id',
`total_count` int(11) NOT NULL DEFAULT '0' COMMENT '售卖总数量',
`total_pay_money` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '总售卖金额',
`updated_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后一次更新时间',
`created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '插入时间',
PRIMARY KEY (`id`),
KEY `date_food_id` (`date`,`food_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='书籍售卖日统计';
DROP TABLE IF EXISTS `stat_daily_member`;
CREATE TABLE `stat_daily_member` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`date` date NOT NULL COMMENT '日期',
`member_id` int(11) NOT NULL DEFAULT '0' COMMENT '会员id',
`total_shared_count` int(11) NOT NULL DEFAULT '0' COMMENT '当日分享总次数',
`total_pay_money` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '当日付款总金额',
`updated_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后一次更新时间',
`created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '插入时间',
PRIMARY KEY (`id`),
KEY `idx_date_member_id` (`date`,`member_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='会员日统计';
DROP TABLE IF EXISTS `stat_daily_site`;
CREATE TABLE `stat_daily_site` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`date` date NOT NULL COMMENT '日期',
`total_pay_money` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '当日应收总金额',
`total_member_count` int(11) NOT NULL COMMENT '会员总数',
`total_new_member_count` int(11) NOT NULL COMMENT '当日新增会员数',
`total_order_count` int(11) NOT NULL COMMENT '当日订单数',
`total_shared_count` int(11) NOT NULL,
`updated_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后一次更新时间',
`created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '插入时间',
PRIMARY KEY (`id`),
KEY `idx_date` (`date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='全站日统计';

View File

@@ -0,0 +1,5 @@
SQL语句执行54php.cn 123456
INSERT INTO `user` (`uid`, `nickname`, `mobile`, `email`, `sex`, `avatar`, `login_name`, `login_pwd`, `login_salt`, `status`, `updated_time`, `created_time`)
VALUES
(1, '编程浪子www.54php.cn', '11012345679', 'apanly@163.com', 1, '', '54php.cn', '816440c40b7a9d55ff9eb7b20760862c', 'cF3JfH5FJfQ8B2Ba', 1, '2017-03-15 14:08:48', '2017-03-15 14:08:48');

View File

@@ -0,0 +1 @@
flask-sqlacodegen "mysql://root:123456@127.0.0.1/food_db" --tables member --outfile "common/models/member/Member.py" --flask