update studentmanagement
This commit is contained in:
Generated
+32
@@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="PYTHON_MODULE" version="4">
|
||||
<component name="FacetManager">
|
||||
<facet type="django" name="Django">
|
||||
<configuration>
|
||||
<option name="rootFolder" value="$MODULE_DIR$" />
|
||||
<option name="settingsModule" value="Lib/settings.py" />
|
||||
<option name="manageScript" value="$MODULE_DIR$/manage.py" />
|
||||
<option name="environment" value="<map/>" />
|
||||
<option name="doNotUseTestRunner" value="false" />
|
||||
<option name="trackFilePattern" value="migrations" />
|
||||
</configuration>
|
||||
</facet>
|
||||
</component>
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
<component name="TemplatesService">
|
||||
<option name="TEMPLATE_CONFIGURATION" value="Django" />
|
||||
<option name="TEMPLATE_FOLDERS">
|
||||
<list>
|
||||
<option value="$MODULE_DIR$/main/templates" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="TestRunnerService">
|
||||
<option name="projectConfiguration" value="pytest" />
|
||||
<option name="PROJECT_TEST_RUNNER" value="pytest" />
|
||||
</component>
|
||||
</module>
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="dataSourceStorageLocal">
|
||||
<data-source name="Django default" uuid="c4e431f8-0777-4d22-ab99-4a988603b107">
|
||||
<database-info product="SQLite" version="3.25.1" jdbc-version="2.1" driver-name="SQLite JDBC" driver-version="3.25.1" dbms="SQLITE" exact-version="3.25.1" exact-driver-version="3.25">
|
||||
<identifier-quote-string>"</identifier-quote-string>
|
||||
</database-info>
|
||||
<case-sensitivity plain-identifiers="mixed" quoted-identifiers="mixed" />
|
||||
<auth-required>false</auth-required>
|
||||
<introspection-schemas>*:@</introspection-schemas>
|
||||
</data-source>
|
||||
</component>
|
||||
</project>
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
|
||||
<data-source source="LOCAL" name="Django default" uuid="c4e431f8-0777-4d22-ab99-4a988603b107">
|
||||
<driver-ref>sqlite.xerial</driver-ref>
|
||||
<synchronize>true</synchronize>
|
||||
<imported>true</imported>
|
||||
<remarks>$PROJECT_DIR$/Lib/settings.py</remarks>
|
||||
<jdbc-driver>org.sqlite.JDBC</jdbc-driver>
|
||||
<jdbc-url>jdbc:sqlite:E:\study\项目\Django-Projects\2016-course-DB-master\Lib\db.sqlite3</jdbc-url>
|
||||
<driver-properties>
|
||||
<property name="enable_load_extension" value="true" />
|
||||
</driver-properties>
|
||||
</data-source>
|
||||
</component>
|
||||
</project>
|
||||
+782
@@ -0,0 +1,782 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<dataSource name="Django default">
|
||||
<database-model serializer="dbm" dbms="SQLITE" family-id="SQLITE" format-version="4.15">
|
||||
<root id="1">
|
||||
<ServerVersion>3.25.1</ServerVersion>
|
||||
</root>
|
||||
<schema id="2" parent="1" name="main">
|
||||
<Current>1</Current>
|
||||
<Visible>1</Visible>
|
||||
</schema>
|
||||
<collation id="3" parent="1" name="BINARY"/>
|
||||
<collation id="4" parent="1" name="NOCASE"/>
|
||||
<collation id="5" parent="1" name="RTRIM"/>
|
||||
<table id="6" parent="2" name="auth_group"/>
|
||||
<table id="7" parent="2" name="auth_group_permissions"/>
|
||||
<table id="8" parent="2" name="auth_permission"/>
|
||||
<table id="9" parent="2" name="auth_user"/>
|
||||
<table id="10" parent="2" name="auth_user_groups"/>
|
||||
<table id="11" parent="2" name="auth_user_user_permissions"/>
|
||||
<table id="12" parent="2" name="django_admin_log"/>
|
||||
<table id="13" parent="2" name="django_content_type"/>
|
||||
<table id="14" parent="2" name="django_migrations"/>
|
||||
<table id="15" parent="2" name="django_session"/>
|
||||
<table id="16" parent="2" name="main_additem"/>
|
||||
<table id="17" parent="2" name="main_book"/>
|
||||
<table id="18" parent="2" name="main_booknum"/>
|
||||
<table id="19" parent="2" name="main_booktype"/>
|
||||
<table id="20" parent="2" name="main_borrowitem"/>
|
||||
<table id="21" parent="2" name="main_staffinfo"/>
|
||||
<table id="22" parent="2" name="main_userinfo"/>
|
||||
<table id="23" parent="2" name="sqlite_master">
|
||||
<System>1</System>
|
||||
</table>
|
||||
<table id="24" parent="2" name="sqlite_sequence">
|
||||
<System>1</System>
|
||||
</table>
|
||||
<column id="25" parent="6" name="id">
|
||||
<Position>1</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
<SequenceIdentity>1</SequenceIdentity>
|
||||
</column>
|
||||
<column id="26" parent="6" name="name">
|
||||
<Position>2</Position>
|
||||
<DataType>varchar(80)|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<index id="27" parent="6" name="sqlite_autoindex_auth_group_1">
|
||||
<NameSurrogate>1</NameSurrogate>
|
||||
<ColNames>name</ColNames>
|
||||
<ColumnCollations></ColumnCollations>
|
||||
<Unique>1</Unique>
|
||||
</index>
|
||||
<key id="28" parent="6">
|
||||
<ColNames>id</ColNames>
|
||||
<Primary>1</Primary>
|
||||
</key>
|
||||
<key id="29" parent="6">
|
||||
<ColNames>name</ColNames>
|
||||
<UnderlyingIndexName>sqlite_autoindex_auth_group_1</UnderlyingIndexName>
|
||||
</key>
|
||||
<column id="30" parent="7" name="id">
|
||||
<Position>1</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
<SequenceIdentity>1</SequenceIdentity>
|
||||
</column>
|
||||
<column id="31" parent="7" name="group_id">
|
||||
<Position>2</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="32" parent="7" name="permission_id">
|
||||
<Position>3</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<index id="33" parent="7" name="sqlite_autoindex_auth_group_permissions_1">
|
||||
<NameSurrogate>1</NameSurrogate>
|
||||
<ColNames>group_id
|
||||
permission_id</ColNames>
|
||||
<ColumnCollations></ColumnCollations>
|
||||
<Unique>1</Unique>
|
||||
</index>
|
||||
<index id="34" parent="7" name="auth_group_permissions_0e939a4f">
|
||||
<ColNames>group_id</ColNames>
|
||||
<ColumnCollations></ColumnCollations>
|
||||
</index>
|
||||
<index id="35" parent="7" name="auth_group_permissions_8373b171">
|
||||
<ColNames>permission_id</ColNames>
|
||||
<ColumnCollations></ColumnCollations>
|
||||
</index>
|
||||
<key id="36" parent="7">
|
||||
<ColNames>id</ColNames>
|
||||
<Primary>1</Primary>
|
||||
</key>
|
||||
<key id="37" parent="7">
|
||||
<ColNames>group_id
|
||||
permission_id</ColNames>
|
||||
<UnderlyingIndexName>sqlite_autoindex_auth_group_permissions_1</UnderlyingIndexName>
|
||||
</key>
|
||||
<foreign-key id="38" parent="7">
|
||||
<ColNames>group_id</ColNames>
|
||||
<RefTableName>auth_group</RefTableName>
|
||||
<RefColNames>id</RefColNames>
|
||||
</foreign-key>
|
||||
<foreign-key id="39" parent="7">
|
||||
<ColNames>permission_id</ColNames>
|
||||
<RefTableName>auth_permission</RefTableName>
|
||||
<RefColNames>id</RefColNames>
|
||||
</foreign-key>
|
||||
<column id="40" parent="8" name="id">
|
||||
<Position>1</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
<SequenceIdentity>1</SequenceIdentity>
|
||||
</column>
|
||||
<column id="41" parent="8" name="name">
|
||||
<Position>2</Position>
|
||||
<DataType>varchar(50)|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="42" parent="8" name="content_type_id">
|
||||
<Position>3</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="43" parent="8" name="codename">
|
||||
<Position>4</Position>
|
||||
<DataType>varchar(100)|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<index id="44" parent="8" name="sqlite_autoindex_auth_permission_1">
|
||||
<NameSurrogate>1</NameSurrogate>
|
||||
<ColNames>content_type_id
|
||||
codename</ColNames>
|
||||
<ColumnCollations></ColumnCollations>
|
||||
<Unique>1</Unique>
|
||||
</index>
|
||||
<index id="45" parent="8" name="auth_permission_417f1b1c">
|
||||
<ColNames>content_type_id</ColNames>
|
||||
<ColumnCollations></ColumnCollations>
|
||||
</index>
|
||||
<key id="46" parent="8">
|
||||
<ColNames>id</ColNames>
|
||||
<Primary>1</Primary>
|
||||
</key>
|
||||
<key id="47" parent="8">
|
||||
<ColNames>content_type_id
|
||||
codename</ColNames>
|
||||
<UnderlyingIndexName>sqlite_autoindex_auth_permission_1</UnderlyingIndexName>
|
||||
</key>
|
||||
<foreign-key id="48" parent="8">
|
||||
<ColNames>content_type_id</ColNames>
|
||||
<RefTableName>django_content_type</RefTableName>
|
||||
<RefColNames>id</RefColNames>
|
||||
</foreign-key>
|
||||
<column id="49" parent="9" name="id">
|
||||
<Position>1</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
<SequenceIdentity>1</SequenceIdentity>
|
||||
</column>
|
||||
<column id="50" parent="9" name="password">
|
||||
<Position>2</Position>
|
||||
<DataType>varchar(128)|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="51" parent="9" name="last_login">
|
||||
<Position>3</Position>
|
||||
<DataType>datetime|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="52" parent="9" name="is_superuser">
|
||||
<Position>4</Position>
|
||||
<DataType>bool|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="53" parent="9" name="username">
|
||||
<Position>5</Position>
|
||||
<DataType>varchar(30)|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="54" parent="9" name="first_name">
|
||||
<Position>6</Position>
|
||||
<DataType>varchar(30)|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="55" parent="9" name="last_name">
|
||||
<Position>7</Position>
|
||||
<DataType>varchar(30)|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="56" parent="9" name="email">
|
||||
<Position>8</Position>
|
||||
<DataType>varchar(75)|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="57" parent="9" name="is_staff">
|
||||
<Position>9</Position>
|
||||
<DataType>bool|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="58" parent="9" name="is_active">
|
||||
<Position>10</Position>
|
||||
<DataType>bool|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="59" parent="9" name="date_joined">
|
||||
<Position>11</Position>
|
||||
<DataType>datetime|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<index id="60" parent="9" name="sqlite_autoindex_auth_user_1">
|
||||
<NameSurrogate>1</NameSurrogate>
|
||||
<ColNames>username</ColNames>
|
||||
<ColumnCollations></ColumnCollations>
|
||||
<Unique>1</Unique>
|
||||
</index>
|
||||
<key id="61" parent="9">
|
||||
<ColNames>id</ColNames>
|
||||
<Primary>1</Primary>
|
||||
</key>
|
||||
<key id="62" parent="9">
|
||||
<ColNames>username</ColNames>
|
||||
<UnderlyingIndexName>sqlite_autoindex_auth_user_1</UnderlyingIndexName>
|
||||
</key>
|
||||
<column id="63" parent="10" name="id">
|
||||
<Position>1</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
<SequenceIdentity>1</SequenceIdentity>
|
||||
</column>
|
||||
<column id="64" parent="10" name="user_id">
|
||||
<Position>2</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="65" parent="10" name="group_id">
|
||||
<Position>3</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<index id="66" parent="10" name="sqlite_autoindex_auth_user_groups_1">
|
||||
<NameSurrogate>1</NameSurrogate>
|
||||
<ColNames>user_id
|
||||
group_id</ColNames>
|
||||
<ColumnCollations></ColumnCollations>
|
||||
<Unique>1</Unique>
|
||||
</index>
|
||||
<index id="67" parent="10" name="auth_user_groups_e8701ad4">
|
||||
<ColNames>user_id</ColNames>
|
||||
<ColumnCollations></ColumnCollations>
|
||||
</index>
|
||||
<index id="68" parent="10" name="auth_user_groups_0e939a4f">
|
||||
<ColNames>group_id</ColNames>
|
||||
<ColumnCollations></ColumnCollations>
|
||||
</index>
|
||||
<key id="69" parent="10">
|
||||
<ColNames>id</ColNames>
|
||||
<Primary>1</Primary>
|
||||
</key>
|
||||
<key id="70" parent="10">
|
||||
<ColNames>user_id
|
||||
group_id</ColNames>
|
||||
<UnderlyingIndexName>sqlite_autoindex_auth_user_groups_1</UnderlyingIndexName>
|
||||
</key>
|
||||
<foreign-key id="71" parent="10">
|
||||
<ColNames>user_id</ColNames>
|
||||
<RefTableName>auth_user</RefTableName>
|
||||
<RefColNames>id</RefColNames>
|
||||
</foreign-key>
|
||||
<foreign-key id="72" parent="10">
|
||||
<ColNames>group_id</ColNames>
|
||||
<RefTableName>auth_group</RefTableName>
|
||||
<RefColNames>id</RefColNames>
|
||||
</foreign-key>
|
||||
<column id="73" parent="11" name="id">
|
||||
<Position>1</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
<SequenceIdentity>1</SequenceIdentity>
|
||||
</column>
|
||||
<column id="74" parent="11" name="user_id">
|
||||
<Position>2</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="75" parent="11" name="permission_id">
|
||||
<Position>3</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<index id="76" parent="11" name="sqlite_autoindex_auth_user_user_permissions_1">
|
||||
<NameSurrogate>1</NameSurrogate>
|
||||
<ColNames>user_id
|
||||
permission_id</ColNames>
|
||||
<ColumnCollations></ColumnCollations>
|
||||
<Unique>1</Unique>
|
||||
</index>
|
||||
<index id="77" parent="11" name="auth_user_user_permissions_e8701ad4">
|
||||
<ColNames>user_id</ColNames>
|
||||
<ColumnCollations></ColumnCollations>
|
||||
</index>
|
||||
<index id="78" parent="11" name="auth_user_user_permissions_8373b171">
|
||||
<ColNames>permission_id</ColNames>
|
||||
<ColumnCollations></ColumnCollations>
|
||||
</index>
|
||||
<key id="79" parent="11">
|
||||
<ColNames>id</ColNames>
|
||||
<Primary>1</Primary>
|
||||
</key>
|
||||
<key id="80" parent="11">
|
||||
<ColNames>user_id
|
||||
permission_id</ColNames>
|
||||
<UnderlyingIndexName>sqlite_autoindex_auth_user_user_permissions_1</UnderlyingIndexName>
|
||||
</key>
|
||||
<foreign-key id="81" parent="11">
|
||||
<ColNames>user_id</ColNames>
|
||||
<RefTableName>auth_user</RefTableName>
|
||||
<RefColNames>id</RefColNames>
|
||||
</foreign-key>
|
||||
<foreign-key id="82" parent="11">
|
||||
<ColNames>permission_id</ColNames>
|
||||
<RefTableName>auth_permission</RefTableName>
|
||||
<RefColNames>id</RefColNames>
|
||||
</foreign-key>
|
||||
<column id="83" parent="12" name="id">
|
||||
<Position>1</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
<SequenceIdentity>1</SequenceIdentity>
|
||||
</column>
|
||||
<column id="84" parent="12" name="action_time">
|
||||
<Position>2</Position>
|
||||
<DataType>datetime|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="85" parent="12" name="object_id">
|
||||
<Position>3</Position>
|
||||
<DataType>text|0s</DataType>
|
||||
</column>
|
||||
<column id="86" parent="12" name="object_repr">
|
||||
<Position>4</Position>
|
||||
<DataType>varchar(200)|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="87" parent="12" name="action_flag">
|
||||
<Position>5</Position>
|
||||
<DataType>smallint unsigned|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="88" parent="12" name="change_message">
|
||||
<Position>6</Position>
|
||||
<DataType>text|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="89" parent="12" name="content_type_id">
|
||||
<Position>7</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
</column>
|
||||
<column id="90" parent="12" name="user_id">
|
||||
<Position>8</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<index id="91" parent="12" name="django_admin_log_417f1b1c">
|
||||
<ColNames>content_type_id</ColNames>
|
||||
<ColumnCollations></ColumnCollations>
|
||||
</index>
|
||||
<index id="92" parent="12" name="django_admin_log_e8701ad4">
|
||||
<ColNames>user_id</ColNames>
|
||||
<ColumnCollations></ColumnCollations>
|
||||
</index>
|
||||
<key id="93" parent="12">
|
||||
<ColNames>id</ColNames>
|
||||
<Primary>1</Primary>
|
||||
</key>
|
||||
<foreign-key id="94" parent="12">
|
||||
<ColNames>content_type_id</ColNames>
|
||||
<RefTableName>django_content_type</RefTableName>
|
||||
<RefColNames>id</RefColNames>
|
||||
</foreign-key>
|
||||
<foreign-key id="95" parent="12">
|
||||
<ColNames>user_id</ColNames>
|
||||
<RefTableName>auth_user</RefTableName>
|
||||
<RefColNames>id</RefColNames>
|
||||
</foreign-key>
|
||||
<column id="96" parent="13" name="id">
|
||||
<Position>1</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
<SequenceIdentity>1</SequenceIdentity>
|
||||
</column>
|
||||
<column id="97" parent="13" name="name">
|
||||
<Position>2</Position>
|
||||
<DataType>varchar(100)|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="98" parent="13" name="app_label">
|
||||
<Position>3</Position>
|
||||
<DataType>varchar(100)|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="99" parent="13" name="model">
|
||||
<Position>4</Position>
|
||||
<DataType>varchar(100)|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<index id="100" parent="13" name="sqlite_autoindex_django_content_type_1">
|
||||
<NameSurrogate>1</NameSurrogate>
|
||||
<ColNames>app_label
|
||||
model</ColNames>
|
||||
<ColumnCollations></ColumnCollations>
|
||||
<Unique>1</Unique>
|
||||
</index>
|
||||
<key id="101" parent="13">
|
||||
<ColNames>id</ColNames>
|
||||
<Primary>1</Primary>
|
||||
</key>
|
||||
<key id="102" parent="13">
|
||||
<ColNames>app_label
|
||||
model</ColNames>
|
||||
<UnderlyingIndexName>sqlite_autoindex_django_content_type_1</UnderlyingIndexName>
|
||||
</key>
|
||||
<column id="103" parent="14" name="id">
|
||||
<Position>1</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
<SequenceIdentity>1</SequenceIdentity>
|
||||
</column>
|
||||
<column id="104" parent="14" name="app">
|
||||
<Position>2</Position>
|
||||
<DataType>varchar(255)|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="105" parent="14" name="name">
|
||||
<Position>3</Position>
|
||||
<DataType>varchar(255)|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="106" parent="14" name="applied">
|
||||
<Position>4</Position>
|
||||
<DataType>datetime|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<key id="107" parent="14">
|
||||
<ColNames>id</ColNames>
|
||||
<Primary>1</Primary>
|
||||
</key>
|
||||
<column id="108" parent="15" name="session_key">
|
||||
<Position>1</Position>
|
||||
<DataType>varchar(40)|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="109" parent="15" name="session_data">
|
||||
<Position>2</Position>
|
||||
<DataType>text|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="110" parent="15" name="expire_date">
|
||||
<Position>3</Position>
|
||||
<DataType>datetime|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<index id="111" parent="15" name="sqlite_autoindex_django_session_1">
|
||||
<NameSurrogate>1</NameSurrogate>
|
||||
<ColNames>session_key</ColNames>
|
||||
<ColumnCollations></ColumnCollations>
|
||||
<Unique>1</Unique>
|
||||
</index>
|
||||
<index id="112" parent="15" name="django_session_de54fa62">
|
||||
<ColNames>expire_date</ColNames>
|
||||
<ColumnCollations></ColumnCollations>
|
||||
</index>
|
||||
<key id="113" parent="15">
|
||||
<ColNames>session_key</ColNames>
|
||||
<Primary>1</Primary>
|
||||
<UnderlyingIndexName>sqlite_autoindex_django_session_1</UnderlyingIndexName>
|
||||
</key>
|
||||
<column id="114" parent="16" name="id">
|
||||
<Position>1</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
<SequenceIdentity>1</SequenceIdentity>
|
||||
</column>
|
||||
<column id="115" parent="16" name="addNum">
|
||||
<Position>2</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="116" parent="16" name="bookId_id">
|
||||
<Position>3</Position>
|
||||
<DataType>varchar(40)|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="117" parent="16" name="staffId_id">
|
||||
<Position>4</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<index id="118" parent="16" name="main_additem_0ee13c1f">
|
||||
<ColNames>bookId_id</ColNames>
|
||||
<ColumnCollations></ColumnCollations>
|
||||
</index>
|
||||
<index id="119" parent="16" name="main_additem_bea22849">
|
||||
<ColNames>staffId_id</ColNames>
|
||||
<ColumnCollations></ColumnCollations>
|
||||
</index>
|
||||
<key id="120" parent="16">
|
||||
<ColNames>id</ColNames>
|
||||
<Primary>1</Primary>
|
||||
</key>
|
||||
<foreign-key id="121" parent="16">
|
||||
<ColNames>bookId_id</ColNames>
|
||||
<RefTableName>main_book</RefTableName>
|
||||
<RefColNames>bookId</RefColNames>
|
||||
</foreign-key>
|
||||
<foreign-key id="122" parent="16">
|
||||
<ColNames>staffId_id</ColNames>
|
||||
<RefTableName>main_staffinfo</RefTableName>
|
||||
<RefColNames>id</RefColNames>
|
||||
</foreign-key>
|
||||
<column id="123" parent="17" name="bookId">
|
||||
<Position>1</Position>
|
||||
<DataType>varchar(40)|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="124" parent="17" name="bookName">
|
||||
<Position>2</Position>
|
||||
<DataType>varchar(40)|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="125" parent="17" name="bookPublisher">
|
||||
<Position>3</Position>
|
||||
<DataType>varchar(40)|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="126" parent="17" name="bookAuthor">
|
||||
<Position>4</Position>
|
||||
<DataType>varchar(50)|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="127" parent="17" name="bookIntroduction">
|
||||
<Position>5</Position>
|
||||
<DataType>text|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="128" parent="17" name="bookPrice">
|
||||
<Position>6</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="129" parent="17" name="bookType_id">
|
||||
<Position>7</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<index id="130" parent="17" name="sqlite_autoindex_main_book_1">
|
||||
<NameSurrogate>1</NameSurrogate>
|
||||
<ColNames>bookId</ColNames>
|
||||
<ColumnCollations></ColumnCollations>
|
||||
<Unique>1</Unique>
|
||||
</index>
|
||||
<index id="131" parent="17" name="main_book_2ae59866">
|
||||
<ColNames>bookType_id</ColNames>
|
||||
<ColumnCollations></ColumnCollations>
|
||||
</index>
|
||||
<key id="132" parent="17">
|
||||
<ColNames>bookId</ColNames>
|
||||
<Primary>1</Primary>
|
||||
<UnderlyingIndexName>sqlite_autoindex_main_book_1</UnderlyingIndexName>
|
||||
</key>
|
||||
<foreign-key id="133" parent="17">
|
||||
<ColNames>bookType_id</ColNames>
|
||||
<RefTableName>main_booktype</RefTableName>
|
||||
<RefColNames>TypeNum</RefColNames>
|
||||
</foreign-key>
|
||||
<column id="134" parent="18" name="id">
|
||||
<Position>1</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
<SequenceIdentity>1</SequenceIdentity>
|
||||
</column>
|
||||
<column id="135" parent="18" name="bookNum">
|
||||
<Position>2</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="136" parent="18" name="bookId_id">
|
||||
<Position>3</Position>
|
||||
<DataType>varchar(40)|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<index id="137" parent="18" name="main_booknum_0ee13c1f">
|
||||
<ColNames>bookId_id</ColNames>
|
||||
<ColumnCollations></ColumnCollations>
|
||||
</index>
|
||||
<key id="138" parent="18">
|
||||
<ColNames>id</ColNames>
|
||||
<Primary>1</Primary>
|
||||
</key>
|
||||
<foreign-key id="139" parent="18">
|
||||
<ColNames>bookId_id</ColNames>
|
||||
<RefTableName>main_book</RefTableName>
|
||||
<RefColNames>bookId</RefColNames>
|
||||
</foreign-key>
|
||||
<column id="140" parent="19" name="TypeNum">
|
||||
<Position>1</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="141" parent="19" name="TypeName">
|
||||
<Position>2</Position>
|
||||
<DataType>varchar(20)|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<key id="142" parent="19">
|
||||
<ColNames>TypeNum</ColNames>
|
||||
<Primary>1</Primary>
|
||||
</key>
|
||||
<column id="143" parent="20" name="borrowItemId">
|
||||
<Position>1</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="144" parent="20" name="hasReturned">
|
||||
<Position>2</Position>
|
||||
<DataType>bool|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="145" parent="20" name="bookId_id">
|
||||
<Position>3</Position>
|
||||
<DataType>varchar(40)|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="146" parent="20" name="staffId_id">
|
||||
<Position>4</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="147" parent="20" name="userId_id">
|
||||
<Position>5</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<index id="148" parent="20" name="main_borrowitem_0ee13c1f">
|
||||
<ColNames>bookId_id</ColNames>
|
||||
<ColumnCollations></ColumnCollations>
|
||||
</index>
|
||||
<index id="149" parent="20" name="main_borrowitem_bea22849">
|
||||
<ColNames>staffId_id</ColNames>
|
||||
<ColumnCollations></ColumnCollations>
|
||||
</index>
|
||||
<index id="150" parent="20" name="main_borrowitem_3491001b">
|
||||
<ColNames>userId_id</ColNames>
|
||||
<ColumnCollations></ColumnCollations>
|
||||
</index>
|
||||
<key id="151" parent="20">
|
||||
<ColNames>borrowItemId</ColNames>
|
||||
<Primary>1</Primary>
|
||||
</key>
|
||||
<foreign-key id="152" parent="20">
|
||||
<ColNames>bookId_id</ColNames>
|
||||
<RefTableName>main_book</RefTableName>
|
||||
<RefColNames>bookId</RefColNames>
|
||||
</foreign-key>
|
||||
<foreign-key id="153" parent="20">
|
||||
<ColNames>staffId_id</ColNames>
|
||||
<RefTableName>main_staffinfo</RefTableName>
|
||||
<RefColNames>id</RefColNames>
|
||||
</foreign-key>
|
||||
<foreign-key id="154" parent="20">
|
||||
<ColNames>userId_id</ColNames>
|
||||
<RefTableName>main_userinfo</RefTableName>
|
||||
<RefColNames>id</RefColNames>
|
||||
</foreign-key>
|
||||
<column id="155" parent="21" name="id">
|
||||
<Position>1</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
<SequenceIdentity>1</SequenceIdentity>
|
||||
</column>
|
||||
<column id="156" parent="21" name="staffName">
|
||||
<Position>2</Position>
|
||||
<DataType>varchar(30)|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="157" parent="21" name="staffId_id">
|
||||
<Position>3</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<index id="158" parent="21" name="main_staffinfo_bea22849">
|
||||
<ColNames>staffId_id</ColNames>
|
||||
<ColumnCollations></ColumnCollations>
|
||||
</index>
|
||||
<key id="159" parent="21">
|
||||
<ColNames>id</ColNames>
|
||||
<Primary>1</Primary>
|
||||
</key>
|
||||
<foreign-key id="160" parent="21">
|
||||
<ColNames>staffId_id</ColNames>
|
||||
<RefTableName>auth_user</RefTableName>
|
||||
<RefColNames>id</RefColNames>
|
||||
</foreign-key>
|
||||
<column id="161" parent="22" name="id">
|
||||
<Position>1</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
<SequenceIdentity>1</SequenceIdentity>
|
||||
</column>
|
||||
<column id="162" parent="22" name="userName">
|
||||
<Position>2</Position>
|
||||
<DataType>varchar(25)|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="163" parent="22" name="userSex">
|
||||
<Position>3</Position>
|
||||
<DataType>bool|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="164" parent="22" name="userAge">
|
||||
<Position>4</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="165" parent="22" name="userPhoneNum">
|
||||
<Position>5</Position>
|
||||
<DataType>varchar(12)|0s</DataType>
|
||||
</column>
|
||||
<column id="166" parent="22" name="userRegistTime">
|
||||
<Position>6</Position>
|
||||
<DataType>date|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<column id="167" parent="22" name="userId_id">
|
||||
<Position>7</Position>
|
||||
<DataType>integer|0s</DataType>
|
||||
<NotNull>1</NotNull>
|
||||
</column>
|
||||
<index id="168" parent="22" name="main_userinfo_3491001b">
|
||||
<ColNames>userId_id</ColNames>
|
||||
<ColumnCollations></ColumnCollations>
|
||||
</index>
|
||||
<key id="169" parent="22">
|
||||
<ColNames>id</ColNames>
|
||||
<Primary>1</Primary>
|
||||
</key>
|
||||
<foreign-key id="170" parent="22">
|
||||
<ColNames>userId_id</ColNames>
|
||||
<RefTableName>auth_user</RefTableName>
|
||||
<RefColNames>id</RefColNames>
|
||||
</foreign-key>
|
||||
<column id="171" parent="23" name="type">
|
||||
<Position>1</Position>
|
||||
<DataType>text|0s</DataType>
|
||||
</column>
|
||||
<column id="172" parent="23" name="name">
|
||||
<Position>2</Position>
|
||||
<DataType>text|0s</DataType>
|
||||
</column>
|
||||
<column id="173" parent="23" name="tbl_name">
|
||||
<Position>3</Position>
|
||||
<DataType>text|0s</DataType>
|
||||
</column>
|
||||
<column id="174" parent="23" name="rootpage">
|
||||
<Position>4</Position>
|
||||
<DataType>int|0s</DataType>
|
||||
</column>
|
||||
<column id="175" parent="23" name="sql">
|
||||
<Position>5</Position>
|
||||
<DataType>text|0s</DataType>
|
||||
</column>
|
||||
<column id="176" parent="24" name="name">
|
||||
<Position>1</Position>
|
||||
</column>
|
||||
<column id="177" parent="24" name="seq">
|
||||
<Position>2</Position>
|
||||
</column>
|
||||
</database-model>
|
||||
</dataSource>
|
||||
Generated
+7
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="JavaScriptSettings">
|
||||
<option name="languageLevel" value="ES6" />
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.7" project-jdk-type="Python SDK" />
|
||||
</project>
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/Lib.iml" filepath="$PROJECT_DIR$/.idea/Lib.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
Generated
+6
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
+353
@@ -0,0 +1,353 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="8cda22e5-3b67-4872-87f7-0b9ccf4e6af1" name="Default Changelist" comment="" />
|
||||
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||
</component>
|
||||
<component name="DatabaseView">
|
||||
<option name="SHOW_INTERMEDIATE" value="true" />
|
||||
<option name="GROUP_DATA_SOURCES" value="true" />
|
||||
<option name="GROUP_SCHEMA" value="true" />
|
||||
<option name="GROUP_CONTENTS" value="false" />
|
||||
<option name="SORT_POSITIONED" value="false" />
|
||||
<option name="SHOW_EMPTY_GROUPS" value="false" />
|
||||
<option name="AUTO_SCROLL_FROM_SOURCE" value="false" />
|
||||
<option name="HIDDEN_KINDS">
|
||||
<set />
|
||||
</option>
|
||||
<expand>
|
||||
<path>
|
||||
<item name="Database" type="3277223f:DatabaseStructure$DbRootGroup" />
|
||||
<item name="Django default" type="feb32156:DbDataSourceImpl" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="Database" type="3277223f:DatabaseStructure$DbRootGroup" />
|
||||
<item name="Django default" type="feb32156:DbDataSourceImpl" />
|
||||
<item name="schemas" type="d4e8921:DatabaseStructure$FamilyGroup" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="Database" type="3277223f:DatabaseStructure$DbRootGroup" />
|
||||
<item name="Django default" type="feb32156:DbDataSourceImpl" />
|
||||
<item name="schemas" type="d4e8921:DatabaseStructure$FamilyGroup" />
|
||||
<item name="main: schema" type="981a47c2:SqliteImplModel$Schema" />
|
||||
</path>
|
||||
</expand>
|
||||
<select />
|
||||
</component>
|
||||
<component name="FileEditorManager">
|
||||
<leaf>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://E:/anaconda3/Lib/site-packages/django/utils/translation/trans_real.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="149">
|
||||
<caret line="158" selection-start-line="158" selection-end-line="158" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/main/migrations/0001_initial.py">
|
||||
<provider selected="true" editor-type-id="text-editor" />
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/main/models.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="253">
|
||||
<caret line="54" column="64" selection-start-line="54" selection-start-column="64" selection-end-line="54" selection-end-column="64" />
|
||||
<folding>
|
||||
<element signature="e#0#28#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/Lib/urls.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="334">
|
||||
<caret line="22" column="1" selection-start-line="22" selection-start-column="1" selection-end-line="22" selection-end-column="1" />
|
||||
<folding>
|
||||
<element signature="e#0#41#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://E:/anaconda3/Lib/site-packages/django/urls/conf.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="201">
|
||||
<caret line="72" selection-start-line="72" selection-end-line="72" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/main/tests.py">
|
||||
<provider selected="true" editor-type-id="text-editor" />
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/Lib/settings.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="608">
|
||||
<caret line="32" column="1" selection-start-line="32" selection-start-column="1" selection-end-line="32" selection-end-column="1" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/main/views.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="228">
|
||||
<caret line="12" column="39" selection-start-line="12" selection-start-column="39" selection-end-line="12" selection-end-column="39" />
|
||||
<folding>
|
||||
<element signature="e#15#26#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/main/admin.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="209">
|
||||
<caret line="11" column="30" selection-start-line="11" selection-start-column="30" selection-end-line="11" selection-end-column="30" />
|
||||
<folding>
|
||||
<element signature="e#0#32#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
</leaf>
|
||||
</component>
|
||||
<component name="FindInProjectRecents">
|
||||
<findStrings>
|
||||
<find>back</find>
|
||||
</findStrings>
|
||||
</component>
|
||||
<component name="Git.Settings">
|
||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/../.." />
|
||||
</component>
|
||||
<component name="IdeDocumentHistory">
|
||||
<option name="CHANGED_PATHS">
|
||||
<list>
|
||||
<option value="$PROJECT_DIR$/main/models.py" />
|
||||
<option value="$PROJECT_DIR$/Lib/urls.py" />
|
||||
<option value="$PROJECT_DIR$/Lib/settings.py" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectConfigurationFiles">
|
||||
<option name="files">
|
||||
<list>
|
||||
<option value="$PROJECT_DIR$/.idea/Lib.iml" />
|
||||
<option value="$PROJECT_DIR$/.idea/vcs.xml" />
|
||||
<option value="$PROJECT_DIR$/.idea/misc.xml" />
|
||||
<option value="$PROJECT_DIR$/.idea/dataSources.xml" />
|
||||
<option value="$PROJECT_DIR$/.idea/modules.xml" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectFrameBounds" extendedState="6">
|
||||
<option name="x" value="-8" />
|
||||
<option name="width" value="977" />
|
||||
<option name="height" value="1038" />
|
||||
</component>
|
||||
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
|
||||
<component name="ProjectView">
|
||||
<navigator proportions="" version="1">
|
||||
<foldersAlwaysOnTop value="true" />
|
||||
</navigator>
|
||||
<panes>
|
||||
<pane id="ProjectPane">
|
||||
<subPane>
|
||||
<expand>
|
||||
<path>
|
||||
<item name="Lib" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="Lib" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="Lib" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="Lib" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="Lib" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="Lib" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="Lib" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="main" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
</expand>
|
||||
<select />
|
||||
</subPane>
|
||||
</pane>
|
||||
<pane id="Scope" />
|
||||
</panes>
|
||||
</component>
|
||||
<component name="PropertiesComponent">
|
||||
<property name="WebServerToolWindowFactoryState" value="false" />
|
||||
<property name="last_opened_file_path" value="$PROJECT_DIR$/../../StudentSystem-master/StudentSystem" />
|
||||
<property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
|
||||
<property name="nodejs_npm_path_reset_for_default_project" value="true" />
|
||||
</component>
|
||||
<component name="RunDashboard">
|
||||
<option name="ruleStates">
|
||||
<list>
|
||||
<RuleState>
|
||||
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
|
||||
</RuleState>
|
||||
<RuleState>
|
||||
<option name="name" value="StatusDashboardGroupingRule" />
|
||||
</RuleState>
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="RunManager">
|
||||
<configuration name="Lib" type="Python.DjangoServer" factoryName="Django server">
|
||||
<module name="Lib" />
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
<option name="PARENT_ENVS" value="true" />
|
||||
<envs>
|
||||
<env name="PYTHONUNBUFFERED" value="1" />
|
||||
<env name="DJANGO_SETTINGS_MODULE" value="Lib.settings" />
|
||||
</envs>
|
||||
<option name="SDK_HOME" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="" />
|
||||
<option name="IS_MODULE_SDK" value="false" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<option name="launchJavascriptDebuger" value="false" />
|
||||
<option name="port" value="8000" />
|
||||
<option name="host" value="" />
|
||||
<option name="additionalOptions" value="" />
|
||||
<option name="browserUrl" value="" />
|
||||
<option name="runTestServer" value="false" />
|
||||
<option name="runNoReload" value="false" />
|
||||
<option name="useCustomRunCommand" value="false" />
|
||||
<option name="customRunCommand" value="" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
</component>
|
||||
<component name="SvnConfiguration">
|
||||
<configuration />
|
||||
</component>
|
||||
<component name="TaskManager">
|
||||
<task active="true" id="Default" summary="Default task">
|
||||
<changelist id="8cda22e5-3b67-4872-87f7-0b9ccf4e6af1" name="Default Changelist" comment="" />
|
||||
<created>1594695714059</created>
|
||||
<option name="number" value="Default" />
|
||||
<option name="presentableId" value="Default" />
|
||||
<updated>1594695714059</updated>
|
||||
<workItem from="1594695720052" duration="3487000" />
|
||||
</task>
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TimeTrackingManager">
|
||||
<option name="totallyTimeSpent" value="3487000" />
|
||||
</component>
|
||||
<component name="ToolWindowManager">
|
||||
<frame x="-7" y="-7" width="1550" height="838" extended-state="6" />
|
||||
<editor active="true" />
|
||||
<layout>
|
||||
<window_info id="Favorites" side_tool="true" />
|
||||
<window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.25" />
|
||||
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
|
||||
<window_info anchor="bottom" id="Docker" show_stripe_button="false" />
|
||||
<window_info anchor="bottom" id="Database Changes" />
|
||||
<window_info anchor="bottom" id="Version Control" />
|
||||
<window_info anchor="bottom" id="Python Console" />
|
||||
<window_info anchor="bottom" id="Terminal" />
|
||||
<window_info anchor="bottom" id="Event Log" side_tool="true" />
|
||||
<window_info anchor="bottom" id="Message" order="0" />
|
||||
<window_info anchor="bottom" id="Find" order="1" />
|
||||
<window_info anchor="bottom" id="Run" order="2" weight="0.3286119" />
|
||||
<window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
|
||||
<window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
|
||||
<window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
|
||||
<window_info anchor="bottom" id="TODO" order="6" />
|
||||
<window_info anchor="right" id="SciView" />
|
||||
<window_info anchor="right" id="Database" visible="true" weight="0.3297587" />
|
||||
<window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
|
||||
<window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
|
||||
<window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
|
||||
</layout>
|
||||
</component>
|
||||
<component name="TypeScriptGeneratedFilesManager">
|
||||
<option name="version" value="1" />
|
||||
</component>
|
||||
<component name="editorHistoryManager">
|
||||
<entry file="file://E:/anaconda3/Lib/site-packages/django/utils/translation/trans_real.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="149">
|
||||
<caret line="158" selection-start-line="158" selection-end-line="158" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/main/migrations/0001_initial.py">
|
||||
<provider selected="true" editor-type-id="text-editor" />
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/main/admin.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="209">
|
||||
<caret line="11" column="30" selection-start-line="11" selection-start-column="30" selection-end-line="11" selection-end-column="30" />
|
||||
<folding>
|
||||
<element signature="e#0#32#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/main/models.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="253">
|
||||
<caret line="54" column="64" selection-start-line="54" selection-start-column="64" selection-end-line="54" selection-end-column="64" />
|
||||
<folding>
|
||||
<element signature="e#0#28#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/main/views.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="228">
|
||||
<caret line="12" column="39" selection-start-line="12" selection-start-column="39" selection-end-line="12" selection-end-column="39" />
|
||||
<folding>
|
||||
<element signature="e#15#26#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/main/tests.py">
|
||||
<provider selected="true" editor-type-id="text-editor" />
|
||||
</entry>
|
||||
<entry file="file://E:/anaconda3/Lib/site-packages/django/urls/conf.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="201">
|
||||
<caret line="72" selection-start-line="72" selection-end-line="72" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/Lib/urls.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="334">
|
||||
<caret line="22" column="1" selection-start-line="22" selection-start-column="1" selection-end-line="22" selection-end-column="1" />
|
||||
<folding>
|
||||
<element signature="e#0#41#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/Lib/settings.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="608">
|
||||
<caret line="32" column="1" selection-start-line="32" selection-start-column="1" selection-end-line="32" selection-end-column="1" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</component>
|
||||
</project>
|
||||
@@ -0,0 +1,116 @@
|
||||
"""
|
||||
Django settings for Lib project.
|
||||
|
||||
For more information on this file, see
|
||||
https://docs.djangoproject.com/en/1.7/topics/settings/
|
||||
|
||||
For the full list of settings and their values, see
|
||||
https://docs.djangoproject.com/en/1.7/ref/settings/
|
||||
"""
|
||||
|
||||
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
||||
import os
|
||||
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
|
||||
|
||||
|
||||
# Quick-start development settings - unsuitable for production
|
||||
# See https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/
|
||||
|
||||
# SECURITY WARNING: keep the secret key used in production secret!
|
||||
SECRET_KEY = '3^y=5xuy(%igotz@mkpl$xn&7c*nrxt=*am#lpf_(@!iw1c+g%'
|
||||
|
||||
# SECURITY WARNING: don't run with debug turned on in production!
|
||||
DEBUG = True
|
||||
|
||||
TEMPLATE_DEBUG = True
|
||||
|
||||
ALLOWED_HOSTS = []
|
||||
CONTEXT_PROCESSORS = [
|
||||
'django.template.context_processors.debug',
|
||||
'django.template.context_processors.request',
|
||||
'django.contrib.auth.context_processors.auth',
|
||||
'django.contrib.messages.context_processors.messages',
|
||||
]
|
||||
TEMPLATES = [
|
||||
{
|
||||
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
||||
'DIRS': [],
|
||||
'APP_DIRS': True,
|
||||
'OPTIONS': {'context_processors': CONTEXT_PROCESSORS, },
|
||||
},
|
||||
{
|
||||
'BACKEND': 'django.template.backends.jinja2.Jinja2'
|
||||
,
|
||||
'DIRS': [
|
||||
os.path.join(BASE_DIR, 'templates'),
|
||||
],
|
||||
'APP_DIRS': True,
|
||||
'OPTIONS': {
|
||||
'context_processors': CONTEXT_PROCESSORS,
|
||||
'environment': '存放路径.env.environment'
|
||||
},
|
||||
},
|
||||
]
|
||||
# Application definition
|
||||
|
||||
INSTALLED_APPS = (
|
||||
'django.contrib.admin',
|
||||
'django.contrib.auth',
|
||||
'django.contrib.contenttypes',
|
||||
'django.contrib.sessions',
|
||||
'django.contrib.messages',
|
||||
'django.contrib.staticfiles',
|
||||
"main",
|
||||
)
|
||||
|
||||
MIDDLEWARE_CLASSES = (
|
||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||
'django.middleware.common.CommonMiddleware',
|
||||
'django.middleware.csrf.CsrfViewMiddleware',
|
||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
|
||||
'django.contrib.messages.middleware.MessageMiddleware',
|
||||
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||
)
|
||||
|
||||
ROOT_URLCONF = 'Lib.urls'
|
||||
|
||||
WSGI_APPLICATION = 'Lib.wsgi.application'
|
||||
|
||||
|
||||
# Database
|
||||
# https://docs.djangoproject.com/en/1.7/ref/settings/#databases
|
||||
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.sqlite3',
|
||||
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
|
||||
}
|
||||
}
|
||||
|
||||
# Internationalization
|
||||
# https://docs.djangoproject.com/en/1.7/topics/i18n/
|
||||
|
||||
LANGUAGE_CODE = 'zh_Hans'
|
||||
|
||||
TIME_ZONE = 'UTC'
|
||||
|
||||
USE_I18N = True
|
||||
|
||||
USE_L10N = True
|
||||
|
||||
USE_TZ = True
|
||||
|
||||
|
||||
# Static files (CSS, JavaScript, Images)
|
||||
# https://docs.djangoproject.com/en/1.7/howto/static-files/
|
||||
|
||||
STATIC_URL = '/static/'
|
||||
STATIC_ROOT = os.path.join(BASE_DIR,"collected_static")
|
||||
STATICFILES_DIRS = (
|
||||
os.path.join(BASE_DIR,"common_static"),
|
||||
'path/to/others/static/',
|
||||
)
|
||||
|
||||
SESSION_SAVE_EVERY_REQUEST = True
|
||||
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
|
||||
@@ -0,0 +1,23 @@
|
||||
from django.conf.urls import include, url
|
||||
from django.contrib import admin
|
||||
import main.views
|
||||
urlpatterns = [
|
||||
|
||||
url(r'^admin/', admin.site.urls),
|
||||
url(r'^loginView/',main.views.loginView,name="loginView"),
|
||||
url(r'^registView/',main.views.registView,name="registView"),
|
||||
url(r'^logoutView/',main.views.logoutView,name="logoutView"),
|
||||
url(r'^userBorrowedBook/',main.views.userBorrowedBook,name="userBorrowedBook"),
|
||||
url(r'^staffAddBookNum/',main.views.staffAddBookNum,name="staffAddBookNum"),
|
||||
url(r'^staffCreateBook/',main.views.staffCreateBook,name="staffCreateBook"),
|
||||
url(r'^viewBook/',main.views.viewBook,name="viewBook"),
|
||||
url(r'^main/',main.views.main,name="main"),
|
||||
url(r'^regist/',main.views.regist,name="regist"),
|
||||
url(r'^login/',main.views.login,name="login"),
|
||||
url(r'^staffBorrowUserBook/',main.views.staffBorrowUserBook,name="staffBorrowUserBook"),
|
||||
url(r'^staffReturnUserBook/',main.views.staffReturnUserBook,name="staffReturnUserBook"),
|
||||
url(r'^staffChangeBookInfo/',main.views.staffChangeBookInfo,name="staffChangeBookInfo"),
|
||||
url(r'^getTypeOptions/',main.views.getTypeOptions,name="getTypeOptions"),
|
||||
url(r'^staffViewUser/',main.views.staffViewUser,name='staffViewUser'),
|
||||
url(r'^staffViewUserDetail/',main.views.staffViewUserDetail,name="staffViewUserDetail"),
|
||||
]
|
||||
@@ -0,0 +1,14 @@
|
||||
"""
|
||||
WSGI config for Lib project.
|
||||
|
||||
It exposes the WSGI callable as a module-level variable named ``application``.
|
||||
|
||||
For more information on this file, see
|
||||
https://docs.djangoproject.com/en/1.7/howto/deployment/wsgi/
|
||||
"""
|
||||
|
||||
import os
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Lib.settings")
|
||||
|
||||
from django.core.wsgi import get_wsgi_application
|
||||
application = get_wsgi_application()
|
||||
Binary file not shown.
@@ -0,0 +1,12 @@
|
||||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
||||
from .models import Book,BookType,BookNum,AddItem,BorrowItem,UserInfo,StaffInfo
|
||||
|
||||
admin.site.register(Book)
|
||||
admin.site.register(BookType)
|
||||
admin.site.register(BookNum)
|
||||
admin.site.register(AddItem)
|
||||
admin.site.register(BorrowItem)
|
||||
admin.site.register(UserInfo)
|
||||
admin.site.register(StaffInfo)
|
||||
@@ -0,0 +1,127 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
from django.conf import settings
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='AddItem',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('addNum', models.IntegerField()),
|
||||
],
|
||||
options={
|
||||
},
|
||||
bases=(models.Model,),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Book',
|
||||
fields=[
|
||||
('bookId', models.CharField(max_length=40, serialize=False, primary_key=True)),
|
||||
('bookName', models.CharField(max_length=40)),
|
||||
('bookPublisher', models.CharField(max_length=40)),
|
||||
('bookAuthor', models.CharField(max_length=50)),
|
||||
('bookIntroduction', models.TextField()),
|
||||
('bookPrice', models.IntegerField()),
|
||||
],
|
||||
options={
|
||||
},
|
||||
bases=(models.Model,),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='BookNum',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('bookNum', models.IntegerField()),
|
||||
('bookId', models.ForeignKey(to='main.Book')),
|
||||
],
|
||||
options={
|
||||
},
|
||||
bases=(models.Model,),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='BookType',
|
||||
fields=[
|
||||
('TypeNum', models.IntegerField(serialize=False, primary_key=True)),
|
||||
('TypeName', models.CharField(max_length=20)),
|
||||
],
|
||||
options={
|
||||
},
|
||||
bases=(models.Model,),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='BorrowItem',
|
||||
fields=[
|
||||
('borrowItemId', models.IntegerField(serialize=False, primary_key=True)),
|
||||
('hasReturned', models.BooleanField(default=False)),
|
||||
('bookId', models.ForeignKey(to='main.Book')),
|
||||
],
|
||||
options={
|
||||
},
|
||||
bases=(models.Model,),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='StaffInfo',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('staffName', models.CharField(max_length=30)),
|
||||
('staffId', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
options={
|
||||
},
|
||||
bases=(models.Model,),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserInfo',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('userName', models.CharField(max_length=25)),
|
||||
('userSex', models.BooleanField(default=True)),
|
||||
('userAge', models.IntegerField()),
|
||||
('userPhoneNum', models.CharField(max_length=12, null=True, blank=True)),
|
||||
('userRegistTime', models.DateField(auto_now_add=True)),
|
||||
('userId', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
options={
|
||||
},
|
||||
bases=(models.Model,),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='borrowitem',
|
||||
name='staffId',
|
||||
field=models.ForeignKey(to='main.StaffInfo'),
|
||||
preserve_default=True,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='borrowitem',
|
||||
name='userId',
|
||||
field=models.ForeignKey(to='main.UserInfo'),
|
||||
preserve_default=True,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='book',
|
||||
name='bookType',
|
||||
field=models.ForeignKey(to='main.BookType'),
|
||||
preserve_default=True,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='additem',
|
||||
name='bookId',
|
||||
field=models.ForeignKey(to='main.Book'),
|
||||
preserve_default=True,
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='additem',
|
||||
name='staffId',
|
||||
field=models.ForeignKey(to='main.StaffInfo'),
|
||||
preserve_default=True,
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,58 @@
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import User as authModel
|
||||
|
||||
# Create your models here.
|
||||
class BookType(models.Model):
|
||||
TypeNum = models.IntegerField(primary_key=True)
|
||||
TypeName = models.CharField(max_length=20)
|
||||
def __unicode__(self):
|
||||
return '%s' % (self.TypeName)
|
||||
|
||||
class Book(models.Model):
|
||||
bookId = models.CharField(max_length = 40,primary_key= True)
|
||||
bookName = models.CharField(max_length=40)
|
||||
bookType = models.ForeignKey(BookType,on_delete=models.CASCADE)
|
||||
bookPublisher = models.CharField(max_length=40)
|
||||
bookAuthor = models.CharField(max_length=50)
|
||||
bookIntroduction = models.TextField()
|
||||
bookPrice = models.IntegerField()
|
||||
def __unicode__(self):
|
||||
return '%s' % (self.bookName)
|
||||
|
||||
class BookNum(models.Model):
|
||||
bookId = models.ForeignKey(Book,on_delete=models.CASCADE)
|
||||
bookNum = models.IntegerField()
|
||||
def __unicode__(self):
|
||||
return '%s' % (self.bookId.bookName)
|
||||
|
||||
class StaffInfo(models.Model):
|
||||
staffId = models.ForeignKey(authModel,on_delete=models.CASCADE)
|
||||
staffName = models.CharField(max_length = 30)
|
||||
def __unicode__(self):
|
||||
return '%s' % (self.staffName)
|
||||
|
||||
class AddItem(models.Model):
|
||||
bookId = models.ForeignKey(Book,on_delete=models.CASCADE)
|
||||
staffId = models.ForeignKey(StaffInfo,on_delete=models.CASCADE)
|
||||
addNum = models.IntegerField()
|
||||
def __unicode__(self):
|
||||
return '%s' % (self.bookId.bookName)
|
||||
|
||||
class UserInfo(models.Model):
|
||||
userId = models.ForeignKey(authModel,on_delete=models.CASCADE)
|
||||
userName = models.CharField(max_length=25)
|
||||
userSex = models.BooleanField(default = True)
|
||||
userAge = models.IntegerField()
|
||||
userPhoneNum = models.CharField(max_length=12,null=True,blank=True)
|
||||
userRegistTime = models.DateField(auto_now_add=True)
|
||||
def __unicode__(self):
|
||||
return '%s' % (self.userName)
|
||||
|
||||
class BorrowItem(models.Model):
|
||||
borrowItemId = models.IntegerField(primary_key = True)
|
||||
bookId = models.ForeignKey(Book,on_delete=models.CASCADE)
|
||||
staffId = models.ForeignKey(StaffInfo,on_delete=models.CASCADE)
|
||||
userId = models.ForeignKey(UserInfo,on_delete=models.CASCADE)
|
||||
hasReturned = models.BooleanField(default = False)
|
||||
def __unicode__(self):
|
||||
return '%s' % (self.borrowItemId)
|
||||
@@ -0,0 +1,209 @@
|
||||
body{
|
||||
font-family: 'Microsoft YaHei',sans-serif;
|
||||
position: relative;
|
||||
margin:0px;
|
||||
background-color: #092B40;
|
||||
}
|
||||
button{
|
||||
font-family: 'Microsoft YaHei',sans-serif;
|
||||
cursor: pointer;
|
||||
}
|
||||
.fail{
|
||||
color:red;
|
||||
}
|
||||
.success{
|
||||
color:green;
|
||||
}
|
||||
.hid{
|
||||
visibility: hidden;
|
||||
}
|
||||
.fontBlue{
|
||||
color:#092B40;
|
||||
}
|
||||
.fontOrange{
|
||||
color:#FF7F00;
|
||||
}
|
||||
.fontWhite{
|
||||
color:#EBEBEB;
|
||||
}
|
||||
.backBlue{
|
||||
background-color:#092B40;
|
||||
}
|
||||
.backOrange{
|
||||
background-color: #FF7F00;
|
||||
}
|
||||
.backWhite{
|
||||
background-color: #EBEBEB;
|
||||
}
|
||||
.nav{
|
||||
width: 100%;
|
||||
height:50px;
|
||||
line-height: 50px;
|
||||
font-size: 19px;
|
||||
position:fixed;
|
||||
background-color: rgba(135,135,135,0.5);
|
||||
margin: 0px;
|
||||
top:0px;
|
||||
left:0px;
|
||||
padding-left: 400px;
|
||||
z-index: 100;
|
||||
}
|
||||
.bookLib{
|
||||
display: inline-block;
|
||||
margin:0px;
|
||||
padding:0px;
|
||||
height:50px;
|
||||
padding:0px 10px;
|
||||
line-height: 50px;
|
||||
text-decoration: none;
|
||||
color:white;
|
||||
}
|
||||
.bookLib:hover{
|
||||
background-color: #EEEEE0;
|
||||
color:#4D4D4D;
|
||||
}
|
||||
.container{
|
||||
width:1200px;
|
||||
padding:50px;
|
||||
margin:0px auto;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
.fullPage{
|
||||
background-color: #EBEBEB;
|
||||
width:100%;
|
||||
height:600px;
|
||||
margin-bottom: 20px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.two{
|
||||
width:540px;
|
||||
margin:10px;
|
||||
float: left;
|
||||
overflow: hidden;
|
||||
height:550px;
|
||||
padding: 30px 0px 0px 30px;
|
||||
}
|
||||
.one{
|
||||
width:1120px;
|
||||
margin:10px;
|
||||
float: left;
|
||||
overflow: hidden;
|
||||
height:550px;
|
||||
padding: 30px 0px 0px 30px;
|
||||
}
|
||||
.line{
|
||||
margin: 10px 0px;
|
||||
font-size: 20px;
|
||||
}
|
||||
.line>span{
|
||||
display:inline-block;
|
||||
width: 120px;
|
||||
}
|
||||
.line>input{
|
||||
border: solid 2px #092B40;
|
||||
padding: 3px 8px;
|
||||
}
|
||||
.line>select{
|
||||
border: solid 2px #092B40;
|
||||
margin-left: 0px;
|
||||
padding: 3px 8px;
|
||||
width:189px;
|
||||
}
|
||||
.line>select:focus{
|
||||
border: solid 2px #092B40;
|
||||
margin-left: 0px;
|
||||
padding: 3px 8px;
|
||||
width:189px;
|
||||
outline: none
|
||||
}
|
||||
.Btn{
|
||||
outline: none;
|
||||
background-color: #EBEBEB;
|
||||
border: solid 2px #092B40;
|
||||
padding: 5px 8px;
|
||||
font-size: 18px;
|
||||
}
|
||||
.Btn:hover{
|
||||
background-color: #092B40;
|
||||
border: solid 2px #FF7F00;
|
||||
color:#EBEBEB;
|
||||
}
|
||||
h1{
|
||||
margin: 0px;
|
||||
}
|
||||
input{
|
||||
outline: none;
|
||||
|
||||
}
|
||||
.currentUser{
|
||||
position:fixed;
|
||||
top:300px;
|
||||
left:100px;
|
||||
padding: 20px 20px 10px 20px;
|
||||
background-color: #EBEBEB;
|
||||
}
|
||||
.currentUser>div>a{
|
||||
width: 50px;
|
||||
text-align: center;
|
||||
display:block;
|
||||
margin:5px auto;
|
||||
text-decoration:none;
|
||||
padding:5px 8px;
|
||||
background-color:#092B40;
|
||||
color:#EBEBEB;
|
||||
}
|
||||
.container{
|
||||
width:1200px;
|
||||
padding:50px;
|
||||
margin:0px auto;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
.templateUserContainer{
|
||||
padding:15px 30px;
|
||||
}
|
||||
.userItem{
|
||||
margin-top: 20px;
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
color:black;
|
||||
padding: 10px 30px;
|
||||
background-color: rgba(9,43,64,0.3);
|
||||
}
|
||||
.userItem:hover{
|
||||
background-color: #092B40;
|
||||
color:#EBEBEB;
|
||||
border-style: none none none solid;
|
||||
border-width: 5px;
|
||||
border-color: #FF7F00;
|
||||
}
|
||||
.pageList{
|
||||
margin-top: 30px;
|
||||
padding-left: 30px;
|
||||
}
|
||||
.pageBtn{
|
||||
outline: none;
|
||||
border: none;
|
||||
background-color:#EBEBEB;
|
||||
text-align: center;
|
||||
min-width: 15px;
|
||||
padding: 0px 10px;
|
||||
margin-right: 2px;
|
||||
line-height: 30px;
|
||||
height:30px;
|
||||
font-size: 15px;
|
||||
display: inline-block;
|
||||
color:#092B40;
|
||||
text-decoration: none;
|
||||
}
|
||||
.pageBtn:hover{
|
||||
color: #EBEBEB;
|
||||
background-color: #092B40;
|
||||
border-radius: 3px;
|
||||
}
|
||||
.active{
|
||||
color: #EBEBEB !important;
|
||||
background-color: #092B40 !important;
|
||||
border-radius: 3px !important ;
|
||||
}
|
||||
@@ -0,0 +1,169 @@
|
||||
body{
|
||||
font-family: 'Microsoft YaHei',sans-serif;
|
||||
position: relative;
|
||||
margin:0px;
|
||||
background-color: #092B40;
|
||||
}
|
||||
.fail{
|
||||
color:red;
|
||||
}
|
||||
.success{
|
||||
color:green;
|
||||
}
|
||||
.hid{
|
||||
visibility: hidden;
|
||||
}
|
||||
.chosen{
|
||||
visibility: visible !important;
|
||||
}
|
||||
.nav{
|
||||
width: 100%;
|
||||
height:50px;
|
||||
line-height: 50px;
|
||||
font-size: 19px;
|
||||
position:fixed;
|
||||
background-color: rgba(135,135,135,0.5);
|
||||
margin: 0px;
|
||||
top:0px;
|
||||
left:0px;
|
||||
padding-left: 400px;
|
||||
z-index: 100;
|
||||
}
|
||||
.currentUser{
|
||||
position:fixed;
|
||||
top:300px;
|
||||
left:100px;
|
||||
padding: 20px 20px 10px 20px;
|
||||
background-color: #EBEBEB;
|
||||
}
|
||||
.currentUser>div>a{
|
||||
width: 50px;
|
||||
text-align: center;
|
||||
display:block;
|
||||
margin:5px auto;
|
||||
text-decoration:none;
|
||||
padding:5px 8px;
|
||||
background-color:#092B40;
|
||||
color:#EBEBEB;
|
||||
}
|
||||
.container{
|
||||
width:1200px;
|
||||
padding:50px;
|
||||
margin:0px auto;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
.bookLib{
|
||||
display: inline-block;
|
||||
margin:0px;
|
||||
padding:0px;
|
||||
height:50px;
|
||||
padding:0px 10px;
|
||||
line-height: 50px;
|
||||
text-decoration: none;
|
||||
color:white;
|
||||
}
|
||||
.bookLib:hover{
|
||||
background-color: #EEEEE0;
|
||||
color:#4D4D4D;
|
||||
}
|
||||
.searchArea{
|
||||
margin-top: 30px;
|
||||
float:right;
|
||||
}
|
||||
.searchArea>button{
|
||||
border:solid 4px #FF7F00;
|
||||
border-radius: 5px;
|
||||
background-color: #6495ED;
|
||||
color:white;
|
||||
padding:5px 10px;
|
||||
font-size: 1.3em;
|
||||
color: white;
|
||||
background-color: #092B40;
|
||||
cursor: pointer;
|
||||
}
|
||||
.searchArea>input{
|
||||
border:solid 3px #FF7F00;
|
||||
border-radius: 10px;
|
||||
height:33px;
|
||||
padding: 2px 10px;
|
||||
line-height: 33px;
|
||||
font-size: 1.3em;
|
||||
margin-right: 5px;
|
||||
outline: none;
|
||||
color: white;
|
||||
background-color: #092B40;
|
||||
}
|
||||
.bookList{
|
||||
clear: both;
|
||||
position: relative;
|
||||
top:20px;
|
||||
width: 1010px;
|
||||
margin:0px auto;
|
||||
z-index: 10;
|
||||
}
|
||||
.bookName{
|
||||
font-size: 20px;
|
||||
}
|
||||
.bookType,.bookPublisher,.bookAuthor,.bookPrice,.bookNum{
|
||||
font-size: 17px;
|
||||
}
|
||||
.intro{
|
||||
font-size: 15px;
|
||||
color:gray;
|
||||
}
|
||||
.book{
|
||||
width:1010px;
|
||||
height:120px;
|
||||
margin-bottom: 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.hover{
|
||||
background-color: #FF7F00;
|
||||
width:10px;
|
||||
float:left;
|
||||
height:120px;
|
||||
}
|
||||
.bookMain{
|
||||
float: left;
|
||||
width:980px;
|
||||
padding-left:20px;
|
||||
background-color: #EBEBEB;
|
||||
}
|
||||
.bookDetail{
|
||||
width:800px;
|
||||
background-color:#D9D9D9;
|
||||
margin:-10px auto 0px auto;
|
||||
}
|
||||
.pageListBox{
|
||||
left:10px;
|
||||
top: 20px;
|
||||
position: relative;
|
||||
width: 1010px;
|
||||
margin:10px auto;
|
||||
color:#EBEBEB;
|
||||
}
|
||||
.pageBtn{
|
||||
text-align: center;
|
||||
min-width: 15px;
|
||||
padding: 0px 10px;
|
||||
margin-right: 2px;
|
||||
line-height: 30px;
|
||||
height:30px;
|
||||
font-size: 15px;
|
||||
display: inline-block;
|
||||
border: solid 2px #EBEBEB;
|
||||
border-radius: 5px;
|
||||
color:#EBEBEB;
|
||||
text-decoration: none;
|
||||
}
|
||||
.pageBtn:hover{
|
||||
color: #092B40;
|
||||
background-color: #EBEBEB;
|
||||
border: solid 2px #FF7F00;
|
||||
}
|
||||
.active{
|
||||
color: #092B40 !important ;
|
||||
background-color: #EBEBEB !important ;
|
||||
border: solid 2px #FF7F00 !important ;
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
body{
|
||||
font-family: 'Microsoft YaHei',sans-serif;
|
||||
}
|
||||
.fail{
|
||||
color:red;
|
||||
}
|
||||
.success{
|
||||
color:green;
|
||||
}
|
||||
.container{
|
||||
width:400px;
|
||||
margin:300px auto;
|
||||
}
|
||||
.inputArea{
|
||||
color:#aaa;
|
||||
width:388px;
|
||||
display: inline-block;
|
||||
border:solid 1px #ddd;
|
||||
border-radius: 2px;
|
||||
font-size: 14px;
|
||||
outline: none;
|
||||
padding: 10px 0px 10px 10px;
|
||||
margin:15px 0px 15px 0px;
|
||||
}
|
||||
.btn{
|
||||
height: 38px;
|
||||
width:184px;
|
||||
outline: none;
|
||||
margin-top: 10px;
|
||||
float:left;
|
||||
font-size: 14px;
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
line-height:38px;
|
||||
}
|
||||
.loginBtn{
|
||||
border: 1px solid #0381AA;
|
||||
background-color: #00A7DE;
|
||||
color:white;
|
||||
cursor:pointer;
|
||||
}
|
||||
.loginBtn:hover{
|
||||
background-color: #00a1d6;\
|
||||
}
|
||||
.registBtn{
|
||||
margin-left: 28px;
|
||||
color: #555;
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
.registBtn:hover{
|
||||
background-color: gray;
|
||||
color:white;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
body{
|
||||
font-family: 'Microsoft YaHei',sans-serif;
|
||||
position: relative;
|
||||
margin:0px;
|
||||
background-color: #092B40;
|
||||
}
|
||||
.container{
|
||||
width:1200px;
|
||||
padding:50px;
|
||||
margin:400px auto;
|
||||
overflow: hidden;
|
||||
color:#EBEBEB;
|
||||
text-align: center;
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
body{
|
||||
font-family: 'Microsoft YaHei',sans-serif;
|
||||
}
|
||||
.fail{
|
||||
color:red;
|
||||
}
|
||||
.success{
|
||||
color:green;
|
||||
}
|
||||
.container{
|
||||
width:400px;
|
||||
margin:100px auto;
|
||||
}
|
||||
.inputArea{
|
||||
color:#aaa;
|
||||
width:388px;
|
||||
display: inline-block;
|
||||
border:solid 1px #ddd;
|
||||
border-radius: 2px;
|
||||
font-size: 14px;
|
||||
outline: none;
|
||||
padding: 10px 0px 10px 10px;
|
||||
margin:15px 0px 15px 0px;
|
||||
}
|
||||
.btn{
|
||||
height: 38px;
|
||||
width:184px;
|
||||
outline: none;
|
||||
margin-top: 10px;
|
||||
float:left;
|
||||
font-size: 14px;
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
line-height:38px;
|
||||
}
|
||||
.registBtn{
|
||||
border: 1px solid #0381AA;
|
||||
background-color: #00A7DE;
|
||||
color:white;
|
||||
cursor:pointer;
|
||||
}
|
||||
.registBtn:hover{
|
||||
background-color: #00a1d6;\
|
||||
}
|
||||
.backBtn{
|
||||
margin-left: 28px;
|
||||
color: #555;
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
.backBtn:hover{
|
||||
background-color: gray;
|
||||
color:white;
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
body{
|
||||
font-family: 'Microsoft YaHei',sans-serif;
|
||||
position: relative;
|
||||
margin:0px;
|
||||
background-color: #092B40;
|
||||
}
|
||||
button{
|
||||
font-family: 'Microsoft YaHei',sans-serif;
|
||||
cursor: pointer;
|
||||
}
|
||||
.fail{
|
||||
color:red;
|
||||
}
|
||||
.success{
|
||||
color:green;
|
||||
}
|
||||
.hid{
|
||||
visibility: hidden;
|
||||
}
|
||||
.fontBlue{
|
||||
color:#092B40;
|
||||
}
|
||||
.fontOrange{
|
||||
color:#FF7F00;
|
||||
}
|
||||
.fontWhite{
|
||||
color:#EBEBEB;
|
||||
}
|
||||
.backBlue{
|
||||
background-color:#092B40;
|
||||
}
|
||||
.backOrange{
|
||||
background-color: #FF7F00;
|
||||
}
|
||||
.backWhite{
|
||||
background-color: #EBEBEB;
|
||||
}
|
||||
.nav{
|
||||
width: 100%;
|
||||
height:50px;
|
||||
line-height: 50px;
|
||||
font-size: 19px;
|
||||
position:fixed;
|
||||
background-color: rgba(135,135,135,0.5);
|
||||
margin: 0px;
|
||||
top:0px;
|
||||
left:0px;
|
||||
padding-left: 400px;
|
||||
z-index: 100;
|
||||
}
|
||||
.bookLib{
|
||||
display: inline-block;
|
||||
margin:0px;
|
||||
padding:0px;
|
||||
height:50px;
|
||||
padding:0px 10px;
|
||||
line-height: 50px;
|
||||
text-decoration: none;
|
||||
color:white;
|
||||
}
|
||||
.bookLib:hover{
|
||||
background-color: #EEEEE0;
|
||||
color:#4D4D4D;
|
||||
}
|
||||
.currentUser{
|
||||
position:fixed;
|
||||
top:300px;
|
||||
left:100px;
|
||||
padding: 20px 20px 10px 20px;
|
||||
background-color: #EBEBEB;
|
||||
}
|
||||
.currentUser>div>a{
|
||||
width: 50px;
|
||||
text-align: center;
|
||||
display:block;
|
||||
margin:5px auto;
|
||||
text-decoration:none;
|
||||
padding:5px 8px;
|
||||
background-color:#092B40;
|
||||
color:#EBEBEB;
|
||||
}
|
||||
.container{
|
||||
width:1200px;
|
||||
padding:50px;
|
||||
margin:0px auto;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
.userInfoContainer{
|
||||
padding: 50px;
|
||||
}
|
||||
.infoItem{
|
||||
height:30px;
|
||||
line-height: 30px;
|
||||
display: block;
|
||||
}
|
||||
.infoBefore{
|
||||
text-align: center;
|
||||
display: inline-block;
|
||||
width: 90px;
|
||||
}
|
||||
.borrowTable{
|
||||
width: 1000px;
|
||||
}
|
||||
.borrowTable td{
|
||||
text-align: center;
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
jQuery(document).ajaxSend(function(event, xhr, settings) {
|
||||
function getCookie(name) {
|
||||
var cookieValue = null;
|
||||
if (document.cookie && document.cookie != '') {
|
||||
var cookies = document.cookie.split(';');
|
||||
for (var i = 0; i < cookies.length; i++) {
|
||||
var cookie = jQuery.trim(cookies[i]);
|
||||
// Does this cookie string begin with the name we want?
|
||||
if (cookie.substring(0, name.length + 1) == (name + '=')) {
|
||||
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return cookieValue;
|
||||
}
|
||||
function sameOrigin(url) {
|
||||
// url could be relative or scheme relative or absolute
|
||||
var host = document.location.host; // host + port
|
||||
var protocol = document.location.protocol;
|
||||
var sr_origin = '//' + host;
|
||||
var origin = protocol + sr_origin;
|
||||
// Allow absolute or scheme relative URLs to same origin
|
||||
return (url == origin || url.slice(0, origin.length + 1) == origin + '/') ||
|
||||
(url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + '/') ||
|
||||
// or any other URL that isn't scheme relative or absolute i.e relative.
|
||||
!(/^(\/\/|http:|https:).*/.test(url));
|
||||
}
|
||||
function safeMethod(method) {
|
||||
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
|
||||
}
|
||||
|
||||
if (!safeMethod(settings.type) && sameOrigin(settings.url)) {
|
||||
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,182 @@
|
||||
function initUserScan(userName,Page){
|
||||
$('#startPage').val(Page);
|
||||
var userHtml = '',pageHtml = '';
|
||||
var username = userName;
|
||||
var offset = $('#offset').val(),startPage = Page;
|
||||
$.get('/staffViewUser',
|
||||
{'username':username,
|
||||
'offset':offset,
|
||||
'startPage':startPage},
|
||||
function(data) {
|
||||
//console.log(data);
|
||||
for(var i=0;i<data.userList.length;i++){
|
||||
userItem = data.userList[i];
|
||||
//console.log(userItem.userid);
|
||||
userHtml += '<a href="/staffViewUserDetail/?userid='+userItem.userid+'" class="userItem">'+
|
||||
'<div><span>'+userItem.userid+'</span> <span>'+userItem.username+'</span></div>'
|
||||
+'<div><span>'+userItem.userage+'</span></div>'
|
||||
+'</a>';
|
||||
}
|
||||
$('.templateUserContainer').html(userHtml);
|
||||
|
||||
if(startPage!=1){pageHtml = '<button class="prev pageBtn"><<</button>';}
|
||||
for(var i=0;i<data.pageList.length;i++){
|
||||
pageItem = data.pageList[i];
|
||||
//console.log(pageItem);
|
||||
if(pageItem == data.currentPage) pageHtml += '<button class="active pageBtn">'+pageItem+'</button>';
|
||||
else pageHtml += '<button class="pageBtn">'+pageItem+'</button>';
|
||||
}
|
||||
if(startPage != data.pageList[data.pageList.length-1]) pageHtml += '<button class="next pageBtn">>></button>';
|
||||
$('.pageList').html(pageHtml);
|
||||
$('.pageBtn').click(function(event) {
|
||||
//var targetPage = $(this).text();
|
||||
//startPage = $('#startPage').val(targetPage);
|
||||
if($(this).hasClass('next')){
|
||||
targetPage = parseInt($('#startPage').val())+1;
|
||||
}
|
||||
else if($(this).hasClass('prev')){
|
||||
targetPage = parseInt($('#startPage').val())-1;
|
||||
}
|
||||
else{
|
||||
targetPage = $(this).text();
|
||||
}
|
||||
initUserScan($('#changeUserName').val(),targetPage);
|
||||
});
|
||||
});
|
||||
}
|
||||
initUserScan('',1);
|
||||
$(document).ready(function(){
|
||||
var typeOptions = [];
|
||||
$.get('/getTypeOptions', function(data) {
|
||||
typeOptions = data;
|
||||
//console.log(typeOptions);
|
||||
});
|
||||
$('.changeUserBtnCheck').click(function(event) {
|
||||
initUserScan($('#changeUserName').val(),1);
|
||||
});
|
||||
$('.returnBtnCheck').click(function(event) {
|
||||
var bookid=$('#returnBookid').val();
|
||||
var userid=$('#returnUserid').val();
|
||||
$.get('/staffReturnUserBook',{"bookid":bookid,"userid":userid},function(data) {
|
||||
$('.returnBookMsg').removeClass('success').removeClass('fail').text("");
|
||||
bookid=$('#returnBookid').val("");
|
||||
userid=$('#returnUserid').val("");
|
||||
if(data.end){
|
||||
$('.returnBookMsg').addClass('success').text("还书成功!");
|
||||
}
|
||||
else{
|
||||
$('.returnBookMsg').addClass('fail').text("还书失败!请重新操作");
|
||||
}
|
||||
});
|
||||
});
|
||||
$('.borrowBtnCheck').click(function(event) {
|
||||
var bookid=$('#borrowBookid').val();
|
||||
var userid=$('#borrowUserid').val();
|
||||
console.log(bookid+userid);
|
||||
$.get('/staffBorrowUserBook',{"bookid":bookid,"userid":userid},function(data) {
|
||||
$('.borrowBookMsg').removeClass('success').removeClass('fail').text("");
|
||||
$('#borrowBookid').val("");
|
||||
$('#borrowUserid').val("");
|
||||
if(data.end){
|
||||
$('.borrowBookMsg').addClass('success').text("借书成功!");
|
||||
}
|
||||
else{
|
||||
$('.borrowBookMsg').addClass('fail').text("借书失败!请重新操作");
|
||||
}
|
||||
});
|
||||
});
|
||||
$('.createBtnCheck').click(function(event){
|
||||
var bookid = $('#createBookId').val();
|
||||
var bookname = $('#createBookName').val();
|
||||
var booktype = $('#createBookType').val();
|
||||
var bookpub = $('#createBookPub').val();
|
||||
var bookauthor = $('#createBookAuthor').val();
|
||||
var bookintro = $('#createBookIntro').val();
|
||||
var bookprice = $('#createBookPrice').val();
|
||||
var booknum = $('#createBookNum').val();
|
||||
$.get('/staffCreateBook',
|
||||
{"bookid":bookid,
|
||||
"bookname":bookname,
|
||||
"booktype":booktype,
|
||||
"bookpublisher":bookpub,
|
||||
"bookauthor":bookauthor,
|
||||
"bookintroduction":bookintro,
|
||||
"bookprice":bookprice,
|
||||
"booknum":booknum},function(data) {
|
||||
console.log(data);
|
||||
});
|
||||
});
|
||||
$('.addBtnCheck').click(function(event) {
|
||||
var bookid = $('#addBookId').val();
|
||||
var addnum = $('#addBookNum').val();
|
||||
$.get('/staffAddBookNum',{"bookid":bookid,"addBookNum":addnum},function(data) {
|
||||
console.log(data);
|
||||
});
|
||||
});
|
||||
$('.changeBookBtnCheck').click(function(event) {
|
||||
var template ='';
|
||||
var bookid = $('#changeBookId').val();
|
||||
$.get('/viewBook',{"mode":"Detail","startPage":0,"offset":10,"bookLikeName":bookid},function(data) {
|
||||
optionTemplate = '';
|
||||
for(var i=0;i<typeOptions.length;i++){
|
||||
option = typeOptions[i];
|
||||
console.log(option);
|
||||
if(option.optionName == data.bookType){
|
||||
optionTemplate+='<option value="'+option.num+'" selected="true">'+option.optionName+'</option>'
|
||||
}
|
||||
else optionTemplate+='<option value="'+option.num+'">'+option.optionName+'</option>'
|
||||
}
|
||||
console.log(data);
|
||||
template+= '<input class="changeBookId" value="'+data.bookId+'" type="hidden"/>'+
|
||||
'<div class="line">'+
|
||||
'<span>图书名称:</span><input type="text" class="changeBookName" value="'+data.bookName+'"/>'+
|
||||
'</div>'+
|
||||
'<div class="line">'+
|
||||
'<span>图书类型:</span>'+
|
||||
'<select class="changeBookType">'+
|
||||
optionTemplate+
|
||||
'</select>'+
|
||||
'</div>'+
|
||||
'<div class="line">'+
|
||||
'<span>作者:</span><input type="text" class="changeBookAuthor" value="'+data.bookAuthor+'"/>'+
|
||||
'</div>'+
|
||||
'<div class="line">'+
|
||||
'<span>出版社:</span><input type="text" class="changeBookPublisher" value="'+data.bookPublisher+'"/>'+
|
||||
'</div>'+
|
||||
'<div class="line">'+
|
||||
'<span>简介:</span><input type="text" class="changeBookIntro" value="'+data.bookIntroduction+'"/>'+
|
||||
'</div>'+
|
||||
'<div class="line">'+
|
||||
'<span>价格:</span><input type="text" class="changeBookPrice" value="'+data.bookPrice+'"/>'+
|
||||
'</div>'+
|
||||
'<div class="line">'+
|
||||
'<span>库存:</span><input type="text" class="changeBookNum" value="'+data.bookNum+'"/>'+
|
||||
'</div>';
|
||||
$('.templateBookContainer').html(template);
|
||||
$('.changeBookBtnSubmit').removeClass('hid');
|
||||
});
|
||||
});
|
||||
$('.changeBookBtnSubmit').click(function(event) {
|
||||
var bookid = $('.changeBookId').val();
|
||||
var bookname = $('.changeBookName').val();
|
||||
var booktype = $('.changeBookType').val();
|
||||
var bookauthor = $('.changeBookAuthor').val();
|
||||
var bookpublisher = $('.changeBookPublisher').val();
|
||||
var bookintro = $('.changeBookIntro').val();
|
||||
var bookprice = $('.changeBookPrice').val();
|
||||
var booknum = $('.changeBookNum').val();
|
||||
$.get('/staffChangeBookInfo',
|
||||
{"bookid":bookid,
|
||||
"bookname":bookname,
|
||||
"booktype":booktype,
|
||||
"bookauthor":bookauthor,
|
||||
"bookpublisher":bookpublisher,
|
||||
"bookintroduction":bookintro,
|
||||
"bookprice":bookprice,
|
||||
"booknum":booknum},
|
||||
function(data) {
|
||||
console.log(data);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
+10074
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,20 @@
|
||||
$('.book').hover(function() {
|
||||
/* Stuff to do when the mouse enters the element */
|
||||
$(this).find(".hover").removeClass('hid');
|
||||
}, function() {
|
||||
/* Stuff to do when the mouse leaves the element */
|
||||
$(this).find(".hover").addClass('hid');
|
||||
});
|
||||
$(".bookMain").click(function(event) {
|
||||
var textDom = $(this).parent().next();
|
||||
var hoverDom = $(this).parent().find(".hover");
|
||||
hoverDom.addClass('chosen');
|
||||
$(this).parent().siblings().find(".hover").removeClass('chosen').parent().next().html("");
|
||||
bookid = $(this).find(".id").val();
|
||||
$.get('/viewBook/',{"bookLikeName":bookid,"mode":"Detail","startPage":1,"offset":10},function(data) {
|
||||
html = '<div class="bookDetail"><span>编号:</span><span class="bookDetailId">'+data.bookId+'</span><br /><span>书名:</span><span class="bookDetailName">'+data.bookName+'</span><br /><span>类型:</span><span class="bookDetailType">'+data.bookType+'</span><br /><span>作者:</span><span class="bookDetailAuthor">'+data.bookAuthor+'</span><br /><span>出版社:</span><span class="bookDetailPublisher">'+data.bookPublisher+'</span><br /><span>简介:</span><span class="bookDetailIntro">'+data.bookIntroduction+'</span><br /><span>价格:</span><span class="bookDetailPrice">'+data.bookPrice+'$</span><br /><span>库存:</span><span class="bookDetailNum">'+data.bookNum+'</span><br />'
|
||||
if(data.bookNum == "0") html += '<span>状态:</span><span class="bookDetailCanBorrow fail">不可借阅</span><br /></div>';
|
||||
else html += '<span>状态:</span><span class="bookDetailCanBorrow success">可借阅</span><br /></div>';
|
||||
textDom.html(html);
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,139 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
|
||||
<meta http-equiv="keywords" content=""/>
|
||||
<meta name="author" content="ZhangWeiJian"/>
|
||||
<title>管理员操作中心</title>
|
||||
<link rel="stylesheet" type="text/css" href="../static/css/indexStaff.css" />
|
||||
<script type="text/javascript" src="../static/scripts/jquery.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="nav">
|
||||
{% if is_staff %}
|
||||
<a href="/main" class="bookLib">管理员中心</a>
|
||||
{% else %}
|
||||
<a href="/main" class="bookLib">用户中心</a>
|
||||
{% endif %}
|
||||
<a href="/viewBook/?bookLikeName=&mode=simple&startPage=1&offset=10" class="bookLib">图书库</a>
|
||||
</div>
|
||||
<div class="currentUser">
|
||||
<div>
|
||||
<span class="staffId"><strong>{{currentUser.userId}}</strong></span>
|
||||
{% if is_staff %}
|
||||
管理员
|
||||
{% else %}
|
||||
用户
|
||||
{% endif %}
|
||||
<br/>
|
||||
<span class="staffName"><strong>{{currentUser.userName}}</strong></span><br/>
|
||||
<a href="/logoutView" class="logout">登出</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="moduleLink">
|
||||
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="fullPage">
|
||||
<div class="borrow two fontBlue">
|
||||
<h1><strong>借</strong></h1>
|
||||
<div class="line">
|
||||
<span>bookId :</span><input type="text" id="borrowBookid"/>
|
||||
</div>
|
||||
<div class="line">
|
||||
<span>userId :</span><input type="text" id="borrowUserid"/>
|
||||
</div>
|
||||
<button class="borrowBtnCheck Btn">借阅</button>
|
||||
<div class="line"><p class="borrowBookMsg"></p></div>
|
||||
</div>
|
||||
<div class="return two fontBlue">
|
||||
<h1><strong>还</strong></h1>
|
||||
<div class="line">
|
||||
<span>bookId :</span><input id="returnBookid" type="text" />
|
||||
</div>
|
||||
<div class="line">
|
||||
<span>userId :</span><input id="returnUserid" type="text" />
|
||||
</div>
|
||||
<button class="returnBtnCheck Btn">还书</button>
|
||||
<div class="line"><p class="returnBookMsg"></p></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="fullPage">
|
||||
<div class="add two fontBlue">
|
||||
<h1><strong>添加图书数量</strong></h1>
|
||||
<div class="line">
|
||||
<span>图书编号 :</span><input type="text" id="addBookId" />
|
||||
</div>
|
||||
<div class="line">
|
||||
<span>数量 :</span><input type="text" id="addBookNum" />
|
||||
</div>
|
||||
<button class="addBtnCheck Btn">添加</button>
|
||||
</div>
|
||||
<div class="create two fontBlue">
|
||||
<h1><strong>添加图书类别</strong></h1>
|
||||
<div class="line">
|
||||
<span>图书编号 :</span><input type="text" id="createBookId" />
|
||||
</div>
|
||||
<div class="line">
|
||||
<span>书名 :</span><input type="text" id="createBookName" />
|
||||
</div>
|
||||
<div class="line">
|
||||
<span>类型 :</span>
|
||||
<select id="createBookType">
|
||||
{% for typeItem in typeList %}
|
||||
<option value="{{typeItem.typeNum}}">{{typeItem.typeInfo}}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
<div class="line">
|
||||
<span>出版社 :</span><input type="text" id="createBookPub" />
|
||||
</div>
|
||||
<div class="line">
|
||||
<span>作者 :</span><input type="text" id="createBookAuthor" />
|
||||
</div>
|
||||
<div class="line">
|
||||
<span>简介 :</span><input type="text" id="createBookIntro" />
|
||||
</div>
|
||||
<div class="line">
|
||||
<span>价格 :</span><input type="text" id="createBookPrice" />
|
||||
</div>
|
||||
<div class="line">
|
||||
<span>数量 :</span><input type="text" id="createBookNum" />
|
||||
</div>
|
||||
<button class="createBtnCheck Btn">添加</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="fullPage">
|
||||
<div class="changeBook one fontBlue">
|
||||
<div class="line">
|
||||
<div class="line" style="float:right;">
|
||||
<input type="text" id="changeBookId" />
|
||||
<button class="changeBookBtnCheck Btn">Check</button>
|
||||
</div>
|
||||
<h1><strong>更改图书信息</strong></h1>
|
||||
</div>
|
||||
<div class="templateBookContainer"></div>
|
||||
<button class="changeBookBtnSubmit Btn hid">Change</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="fullPage">
|
||||
<div class="viewUser one fontBlue">
|
||||
<div class="line">
|
||||
<div class="line" style="float:right;">
|
||||
<input type="text" id="changeUserName" />
|
||||
<input type="hidden" id="offset" value="3"/>
|
||||
<input type="hidden" id="startPage" value="1"/>
|
||||
<button class="changeUserBtnCheck Btn">Check</button>
|
||||
</div>
|
||||
<h1><strong>浏览用户信息</strong></h1>
|
||||
</div>
|
||||
<div class="templateUserContainer">
|
||||
</div>
|
||||
<div class="pageList">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript" src="../static/scripts/indexStaff.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,88 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
|
||||
<meta http-equiv="keywords" content=""/>
|
||||
<meta name="author" content="ZhangWeiJian"/>
|
||||
<link rel="stylesheet" type="text/css" href="../static/css/library.css" />
|
||||
<script type="text/javascript" src="../static/scripts/jquery.js"></script>
|
||||
<title>图书列表</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="nav">
|
||||
{% if is_staff %}
|
||||
<a href="/main" class="bookLib">管理员中心</a>
|
||||
{% else %}
|
||||
<a href="/main" class="bookLib">用户中心</a>
|
||||
{% endif %}
|
||||
<a href="/viewBook/?bookLikeName=&mode=simple&startPage=1&offset=10" class="bookLib">图书库</a>
|
||||
</div>
|
||||
<div class="currentUser">
|
||||
<div>
|
||||
<span class="staffId"><strong>{{currentUser.userId}}</strong></span>
|
||||
{% if is_staff %}
|
||||
管理员
|
||||
{% else %}
|
||||
用户
|
||||
{% endif %}
|
||||
<br/>
|
||||
<span class="staffName"><strong>{{currentUser.userName}}</strong></span><br/>
|
||||
<a href="/logoutView" class="logout">登出</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container">
|
||||
<form class="searchArea" action="/viewBook/" method="get">
|
||||
<input class="inputArea" name="bookLikeName" type="text"/>
|
||||
<input name="mode" value="simple" type="hidden"/>
|
||||
<input name="startPage" value="1" type="hidden"/>
|
||||
<input name="offset" value="10" type="hidden"/>
|
||||
<button class="searchBtn">Search...</button>
|
||||
</form>
|
||||
<div class="bookList">
|
||||
{% for book in bookList %}
|
||||
<div class="book">
|
||||
<div class="hover hid"></div>
|
||||
<div class="bookMain">
|
||||
<div>
|
||||
<input class="id" value={{book.bookId}} type="hidden"/>
|
||||
<span class="bookName"><strong>{{book.bookName}}</strong></span>
|
||||
<span class="bookType">{{book.bookType}}</span>
|
||||
</div>
|
||||
<div>
|
||||
<span class="bookPublisher">{{book.bookPublisher}}</span>
|
||||
<span class="bookAuthor">{{book.bookAuthor}}</span>
|
||||
</div>
|
||||
<div>
|
||||
<span class="bookPrice fail">{{book.bookPrice}}$</span>
|
||||
{% if book.bookNum %}
|
||||
库存:<span class="bookNum success">{{book.bookNum}}</span>
|
||||
{% else %}
|
||||
库存:<span class="bookNum fail"><strong>0</strong></span>
|
||||
{% endif %}
|
||||
</div>
|
||||
<p class="intro">{{book.bookIntroduction}}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div></div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="pageListBox">
|
||||
{% if currentPage != 1 %}
|
||||
<a href="/viewBook/?bookLikeName={{bookLikeName}}&mode=simple&startPage={{prevPage}}&offset=10" class="prev pageBtn">上一页</a>
|
||||
{% endif %}
|
||||
{% for i in pageList %}
|
||||
{% if i == currentPage %}
|
||||
<a href="/viewBook/?bookLikeName={{bookLikeName}}&mode=simple&startPage={{i}}&offset=10" class="pageBtn active">{{i}}</a>
|
||||
{% else %}
|
||||
<a href="/viewBook/?bookLikeName={{bookLikeName}}&mode=simple&startPage={{i}}&offset=10" class="pageBtn">{{i}}</a>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% if currentPage != endPage %}
|
||||
<a href="/viewBook/?bookLikeName={{bookLikeName}}&mode=simple&startPage={{nextPage}}&offset=10" class="next pageBtn">下一页</a>{{page_range}}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript" src="../static/scripts/library.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,32 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
|
||||
<meta http-equiv="keywords" content=""/>
|
||||
<meta name="author" content="ZhangWeiJian"/>
|
||||
<link rel="stylesheet" type="text/css" href="../static/css/login.css" />
|
||||
<title>登陆</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div>
|
||||
<div class="container">
|
||||
<div class="login">
|
||||
<form action="/login/" method="post">
|
||||
{% csrf_token %}
|
||||
<input type="text" name="id" id="id" class="inputArea" placeholder="你的用户ID">
|
||||
<input type="password" name="pw" id="pw" class="inputArea" placeholder="密码">
|
||||
|
||||
<input id="submit" class="loginBtn btn" type="submit" value="登陆" />
|
||||
<a id="registBtn" class="registBtn btn" href="/registView" >注册</a>
|
||||
<p class="fail">{{msgFail}}</p>
|
||||
<p class="success">{{msgTrue}}</p>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript" src="../static/scripts/jquery.js"></script>
|
||||
<script type="text/javascript" src="../static/scripts/csrf.js"></script>
|
||||
<!--script type="text/javascript" src="../static/scripts/login.js"></script-->
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,18 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
|
||||
<meta http-equiv="keywords" content=""/>
|
||||
<meta name="author" content="ZhangWeiJian"/>
|
||||
<meta http-equiv="refresh" content="3;url=/loginView/"/>
|
||||
<link rel="stylesheet" type="text/css" href="../static/css/logout.css" />
|
||||
<script type="text/javascript" src="../static/scripts/jquery.js"></script>
|
||||
<title>您已退出登陆</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="container">
|
||||
<h2>您已退出登陆</h2><h4>3S后自动跳转</h4>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,37 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
|
||||
<meta http-equiv="keywords" content=""/>
|
||||
<meta name="author" content="ZhangWeiJian"/>
|
||||
<link rel="stylesheet" type="text/css" href="../static/css/regist.css" />
|
||||
<title>注册</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="regist">
|
||||
<form action="/regist/" method="post">
|
||||
{% csrf_token %}
|
||||
<input type="text" name="id" id="id" class="inputArea" placeholder="用户ID" />
|
||||
<input type="password" name="pw" id="pw" class="inputArea" placeholder="密码" />
|
||||
<input type="text" name="name" id="name" class="inputArea" placeholder="用户名" />
|
||||
<select id="sex" name="sex" class="inputArea">
|
||||
<option value="True">男</option>
|
||||
<option value="">女</option>
|
||||
</select>
|
||||
<input type="text" name="age" id="age" class="inputArea" placeholder="年龄" />
|
||||
<input type="text" name="email" id="email" class="inputArea" placeholder="E-Mail" />
|
||||
<input type="text" name="phonenum" id="phonenum" class="inputArea" placeholder="手机号" />
|
||||
|
||||
<button id="submit" class="registBtn btn" type="submit" >注册</button>
|
||||
<a id="backBtn" class="backBtn btn" href="/loginView" >返回</a>
|
||||
<p class="fail">{{msgFail}}</p>
|
||||
<p class="success">{{msgTrue}}</p>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript" src="../static/scripts/jquery.js"></script>
|
||||
<script type="text/javascript" src="../static/scripts/csrf.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,72 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
|
||||
<meta http-equiv="keywords" content=""/>
|
||||
<meta name="author" content="ZhangWeiJian"/>
|
||||
<link rel="stylesheet" type="text/css" href="../static/css/userDetail.css" />
|
||||
<script type="text/javascript" src="../static/scripts/jquery.js"></script>
|
||||
<title>用户信息界面</title>
|
||||
</head>
|
||||
<body>
|
||||
<div class="nav">
|
||||
{% if is_staff %}
|
||||
<a href="/main" class="bookLib">管理员中心</a>
|
||||
{% else %}
|
||||
<a href="/main" class="bookLib">用户中心</a>
|
||||
{% endif %}
|
||||
<a href="/viewBook/?bookLikeName=&mode=simple&startPage=1&offset=10" class="bookLib">图书库</a>
|
||||
</div>
|
||||
<div class="currentUser">
|
||||
<div>
|
||||
<span class="staffId"><strong>{{currentUser.userId}}</strong></span>
|
||||
{% if is_staff %}
|
||||
管理员
|
||||
{% else %}
|
||||
用户
|
||||
{% endif %}
|
||||
<br/>
|
||||
<span class="staffName"><strong>{{currentUser.userName}}</strong></span><br/>
|
||||
<a href="/logoutView" class="logout">登出</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="userInfoContainer backWhite fontBlue">
|
||||
<p class="infoItem"><span class="infoBefore">用户ID</span>:<span>{{userInfo.userid}}</span></p>
|
||||
<p class="infoItem"><span class="infoBefore">用户名</span>:<span>{{userInfo.username}}</span></p>
|
||||
<p class="infoItem"><span class="infoBefore">性别</span>:<span>{{userInfo.sex}}</span></p>
|
||||
<p class="infoItem"><span class="infoBefore">年龄</span>:<span>{{userInfo.age}}</span></p>
|
||||
<p class="infoItem"><span class="infoBefore">E-mail</span>:<span>{{userInfo.email}}</span></p>
|
||||
<p class="infoItem"><span class="infoBefore">联系电话</span>:<span>{{userInfo.pn}}</span></p>
|
||||
<p class="infoItem"><span class="infoBefore">注册时间</span>:<span>{{userInfo.time}}</span></p>
|
||||
<hr />
|
||||
<div class="borrowInfoList">
|
||||
<table class="borrowTable" cellpadding="10">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>书名</th>
|
||||
<th>操作员ID</th>
|
||||
<th>是否已还</th>
|
||||
</tr>
|
||||
{% for borrowItem in borrowList %}
|
||||
<tr>
|
||||
<td>{{borrowItem.itemNum}}</td>
|
||||
<td>{{borrowItem.bookName}}</td>
|
||||
<td>{{borrowItem.staffId}}</td>
|
||||
{% if borrowItem.hasReturn %}
|
||||
<td class="success"><strong>✔</strong></td>
|
||||
{% else %}
|
||||
<td class="fail"><strong>✘</strong></td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<hr />
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript" src="../static/scripts/userDetail.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
@@ -0,0 +1,451 @@
|
||||
# coding:utf-8
|
||||
import json
|
||||
from django.shortcuts import render
|
||||
from django.http import HttpResponse,HttpResponseRedirect
|
||||
from django.contrib.auth.models import Permission
|
||||
from django.contrib.auth.models import User as authUser
|
||||
from django.contrib import auth
|
||||
from django.core.paginator import Paginator
|
||||
|
||||
from main.models import Book,BookType,BookNum,AddItem,BorrowItem,UserInfo,StaffInfo
|
||||
# Create your views here.
|
||||
def loginView(request):
|
||||
if request.user.is_authenticated():
|
||||
auth.logout(request)
|
||||
return render(request,"login.html",{'msgFail':'已有用户登陆中,自动登出请重新登陆'})
|
||||
else:
|
||||
return render(request,"login.html")
|
||||
def logoutView(request):
|
||||
auth.logout(request)
|
||||
return render(request,"logout.html")
|
||||
|
||||
def registView(request):
|
||||
return render(request,"regist.html")
|
||||
|
||||
def main(request):
|
||||
if request.user.is_authenticated():
|
||||
currentUser = request.user
|
||||
if currentUser.is_staff:
|
||||
staffInfo = StaffInfo.objects.get(staffId=currentUser)
|
||||
typeInfo = []
|
||||
for typeItem in BookType.objects.all():
|
||||
typeInfo.append({"typeNum":typeItem.TypeNum,"typeInfo":typeItem.TypeName})
|
||||
currentUserInfo = {"userId":currentUser.username,
|
||||
"userName":staffInfo.staffName}
|
||||
return render(request,'indexStaff.html',{"currentUser":currentUserInfo,"is_staff":True,"typeList":typeInfo})#To staffMain
|
||||
else:
|
||||
return HttpResponseRedirect("/staffViewUserDetail")
|
||||
else:
|
||||
return HttpResponseRedirect("/loginView")
|
||||
|
||||
def logout(request):
|
||||
if request.user.is_authenticated():
|
||||
auth.logout(request)
|
||||
return HttpResponseRedirect("/login")
|
||||
else:
|
||||
return HttpResponseRedirect("/login")
|
||||
|
||||
def regist(request):
|
||||
try:
|
||||
userid = request.POST['id']
|
||||
userpw = request.POST['pw']
|
||||
useremail = request.POST['email']
|
||||
username = request.POST['name']
|
||||
usersex = request.POST['sex']
|
||||
userage = request.POST['age']
|
||||
userpn = request.POST['phonenum']
|
||||
except:
|
||||
HttpResponseRedirect("/registView")
|
||||
try:
|
||||
user = authUser.objects.create_user(username = userid,
|
||||
password = userpw,
|
||||
email = useremail)
|
||||
user.is_staff = False
|
||||
user.save()
|
||||
try:
|
||||
UserInfo.objects.create(userId = user,
|
||||
userName = username,
|
||||
userSex = usersex,
|
||||
userAge = userage,
|
||||
userPhoneNum = userpn)
|
||||
except:
|
||||
return HttpResponse("regist fail")
|
||||
return HttpResponseRedirect("/loginView")
|
||||
except:
|
||||
return HttpResponseRedirect("/registView")
|
||||
|
||||
def login(request):
|
||||
try:
|
||||
userId = request.POST['id']
|
||||
userPw = request.POST['pw']
|
||||
except:
|
||||
return HttpResponseRedirect("/login")
|
||||
user = auth.authenticate(username=userId,password=userPw)
|
||||
if user is not None and user.is_active:
|
||||
auth.login(request,user)
|
||||
return HttpResponseRedirect("/main")
|
||||
else:
|
||||
return HttpResponseRedirect("/login")
|
||||
|
||||
def userBorrowedBook(request):#得到当前用户已借阅图书数组
|
||||
if request.user.is_authenticated():
|
||||
currentUser = request.user
|
||||
if currentUser.is_staff:
|
||||
try:
|
||||
userid = request.GET['userid']
|
||||
userInfoFK = UserInfo.objects.get(userId = authUser.objects.get(username=userid))
|
||||
borrowItems = BorrowItem.objects.filter(userId = userInfoFK)
|
||||
ansBookList = []
|
||||
for item in borrowItems:
|
||||
if not item.hasReturned:
|
||||
ansBookList.append(item.bookId)
|
||||
ans = []
|
||||
for bookItem in ansBookList:
|
||||
currentBook = {"name":bookItem.bookName,
|
||||
"type":bookItem.bookType.TypeName,
|
||||
"author":bookItem.bookAuthor,
|
||||
"price":bookItem.bookPrice}
|
||||
ans.append(currentBook)
|
||||
return HttpResponse(json.dumps({"end":True,"msg":ans}),content_type="application/json")
|
||||
except:
|
||||
return HttpResponse(json.dumps({"end":False}),content_type="application/json")
|
||||
else:
|
||||
try:
|
||||
userInfoFK = UserInfo.objects.get(userId=currentUser)
|
||||
borrowItems = BorrowItem.objects.filter(userId = userInfoFK)
|
||||
ansBookList = []
|
||||
for item in borrowItems:
|
||||
if not item.hasReturned:
|
||||
ansBookList.append(item.bookId)
|
||||
ans = []
|
||||
for bookItem in ansBookList:
|
||||
currentBook = {"name":bookItem.bookName,
|
||||
"type":bookItem.bookType.TypeName,
|
||||
"author":bookItem.bookAuthor,
|
||||
"price":bookItem.bookPrice}
|
||||
ans.append(currentBook)
|
||||
return HttpResponse(json.dumps({"end":True,"msg":ans}),content_type="application/json")
|
||||
except:
|
||||
return HttpResponse(json.dumps({"end":False}),content_type="application/json")
|
||||
return HttpResponse(json.dumps({"end":False}),content_type="application/json")
|
||||
else:
|
||||
return HttpResponse(json.dumps({"end":False}),content_type="application/json")
|
||||
|
||||
def viewBook(request):
|
||||
if request.user.is_authenticated():
|
||||
currentUser = request.user
|
||||
if currentUser.is_staff:
|
||||
staffOrNot = True
|
||||
userFK = StaffInfo.objects.get(staffId=currentUser).staffName
|
||||
else:
|
||||
staffOrNot = False
|
||||
userFK = UserInfo.objects.get(userId=currentUser).userName
|
||||
currentUserTrans = {"userId":currentUser.username,"userName":userFK}
|
||||
try:
|
||||
mode = request.GET['mode']
|
||||
startPage = request.GET['startPage']
|
||||
offset = request.GET['offset']
|
||||
bookLikeName = request.GET['bookLikeName']
|
||||
except:
|
||||
return HttpResponse("get error")
|
||||
ans = []
|
||||
if mode == 'Detail':
|
||||
BookAns = Book.objects.get(bookId=bookLikeName)#得到书的详细信息
|
||||
BookNumFK = BookNum.objects.get(bookId=BookAns)
|
||||
BookDetail = {"bookId":BookAns.bookId,
|
||||
"bookName":BookAns.bookName,
|
||||
"bookType":BookAns.bookType.TypeName,
|
||||
"bookPublisher":BookAns.bookPublisher,
|
||||
"bookAuthor":BookAns.bookAuthor,
|
||||
"bookIntroduction":BookAns.bookIntroduction,
|
||||
"bookPrice":BookAns.bookPrice,
|
||||
"bookNum":BookNumFK.bookNum}
|
||||
return HttpResponse(json.dumps(BookDetail),content_type="application/json")
|
||||
elif mode == "simple":
|
||||
currentPage = int(startPage)
|
||||
if bookLikeName == '':#一连串书的信息
|
||||
BookAll = Book.objects.all().order_by("bookName")
|
||||
else:
|
||||
BookAll = Book.objects.filter(bookName__contains=bookLikeName).order_by("bookName")
|
||||
bookPagi = Paginator(BookAll,int(offset))
|
||||
pageN = bookPagi.page(currentPage)
|
||||
pageNum = bookPagi.page_range[-1]
|
||||
after_range_num = 5
|
||||
befor_range_num = 4
|
||||
bookAnsList = pageN.object_list
|
||||
if currentPage-1>after_range_num:
|
||||
pageList = bookPagi.page_range[currentPage-1-after_range_num:currentPage-1+befor_range_num]
|
||||
else:
|
||||
pageList = bookPagi.page_range[0:currentPage-1+befor_range_num]
|
||||
for BookAns in bookAnsList:
|
||||
BookNumFK = BookNum.objects.get(bookId=BookAns)
|
||||
BookDetail = {"bookName":BookAns.bookName,
|
||||
"bookId":BookAns.bookId,
|
||||
"bookType":BookAns.bookType.TypeName,
|
||||
"bookPublisher":BookAns.bookPublisher,
|
||||
"bookAuthor":BookAns.bookAuthor,
|
||||
"bookPrice":BookAns.bookPrice,
|
||||
"bookNum":BookNumFK.bookNum,
|
||||
"bookIntroduction":BookAns.bookIntroduction[:60]}
|
||||
ans.append(BookDetail)
|
||||
return render(request,'library.html',{"currentUser":currentUserTrans,"is_staff":staffOrNot,"bookList":ans,"bookLikeName":bookLikeName,"pageList":pageList,"currentPage":currentPage,"nextPage":currentPage+1,"prevPage":currentPage-1,"endPage":pageNum})
|
||||
else:
|
||||
return HttpResponseRedirect("/login")
|
||||
|
||||
def staffCreateBook(request):#添加Book信息,添加BookNum=0
|
||||
if request.user.is_authenticated():
|
||||
currentUser = request.user
|
||||
if currentUser.is_staff:
|
||||
if currentUser.has_perms(["main.add_additem","main.add_booknum"]):
|
||||
try:
|
||||
bookid = request.GET['bookid']
|
||||
bookname = request.GET['bookname']
|
||||
booktype = request.GET['booktype']
|
||||
bookpublisher = request.GET['bookpublisher']
|
||||
bookauthor = request.GET['bookauthor']
|
||||
bookintroduction = request.GET['bookintroduction']
|
||||
bookprice = request.GET['bookprice']
|
||||
booknum = request.GET['booknum']
|
||||
except:
|
||||
return HttpResponse('get error')
|
||||
bookTypeFK = BookType.objects.get(TypeNum=booktype)
|
||||
createBook = Book.objects.create(bookId=bookid,
|
||||
bookName=bookname,
|
||||
bookType=bookTypeFK,
|
||||
bookPublisher=bookpublisher,
|
||||
bookAuthor=bookauthor,
|
||||
bookIntroduction=bookintroduction,
|
||||
bookPrice=bookprice)
|
||||
BookNum.objects.create(bookId=createBook,
|
||||
bookNum=booknum)
|
||||
AddItem.objects.create(bookId=createBook,
|
||||
staffId=StaffInfo.objects.get(staffId=currentUser),
|
||||
addNum=booknum)
|
||||
return HttpResponse("success!!!")
|
||||
else:
|
||||
return HttpResponse("you do not have this perm")
|
||||
else:
|
||||
return HttpResponse("login Page,you are not login already")
|
||||
|
||||
def staffAddBookNum(request):#已存在Book类,添加addItem 更改或添加BookNum
|
||||
if request.user.is_authenticated():
|
||||
currentUser = request.user
|
||||
if currentUser.is_staff:
|
||||
if currentUser.has_perms(["main.add_additem","main.change_additem","main.add_booknum","main.change_booknum"]):
|
||||
try:
|
||||
try:
|
||||
bookid = request.GET['bookid']
|
||||
addBookNum = request.GET['addBookNum']
|
||||
except:
|
||||
return HttpResponse(bookid)
|
||||
BookFK = Book.objects.get(bookId=bookid)
|
||||
staffInfoFK = StaffInfo.objects.get(staffId=currentUser)
|
||||
AddItem.objects.create(bookId=BookFK,staffId=staffInfoFK,addNum=addBookNum)
|
||||
try:
|
||||
changeBookNum = BookNum.objects.get(bookId__bookId=bookid)
|
||||
changeBookNum.bookNum += int(addBookNum)
|
||||
changeBookNum.save()
|
||||
except:
|
||||
BookNum.objects.create(bookId=BookFK,bookNum=addBookNum)
|
||||
return HttpResponse("add success!")
|
||||
except:
|
||||
return HttpResponse('error GET')
|
||||
else:
|
||||
return HttpResponse("you do not have this perm")
|
||||
else:
|
||||
auth.logout(request)
|
||||
return HttpResponse("you are not staff")
|
||||
else:
|
||||
return HttpResponse("login Page,you are not login already")
|
||||
|
||||
def staffBorrowUserBook(request):
|
||||
if request.user.is_authenticated():
|
||||
currentUser = request.user
|
||||
if currentUser.is_staff:
|
||||
if currentUser.has_perms(["main.add_borrowitem",'main.change_booknum']):
|
||||
try:
|
||||
bookid = request.GET['bookid']
|
||||
userid = request.GET['userid']
|
||||
except:
|
||||
return HttpResponse('get error')
|
||||
bookNumItem = BookNum.objects.get(bookId__bookId=bookid)
|
||||
if bookNumItem.bookNum==0:
|
||||
return HttpResponse("no more book avalible")
|
||||
borrowitemsNum = len(BorrowItem.objects.all())
|
||||
borrowitems = BorrowItem.objects.create(borrowItemId=borrowitemsNum+1,
|
||||
bookId=Book.objects.get(bookId=bookid),
|
||||
staffId=StaffInfo.objects.get(staffId=currentUser),
|
||||
userId=UserInfo.objects.get(userId__username=userid),
|
||||
hasReturned=False)
|
||||
bookNumItem.bookNum -= 1
|
||||
bookNumItem.save()
|
||||
return HttpResponse(json.dumps({'end':True}),content_type="application/json")
|
||||
else:
|
||||
return HttpResponse("has no perm")
|
||||
else:
|
||||
return HttpResponse("you have no perm")
|
||||
else:
|
||||
return HttpResponse("login Page,you are not login already")
|
||||
|
||||
def staffReturnUserBook(request):
|
||||
if request.user.is_authenticated():
|
||||
currentUser = request.user
|
||||
if currentUser.is_staff:
|
||||
if currentUser.has_perms(["main.change_borrowitem"]):
|
||||
try:
|
||||
bookid = request.GET['bookid']
|
||||
userid = request.GET['userid']
|
||||
except:
|
||||
return HttpResponse('get error')
|
||||
bookNumItem = BookNum.objects.get(bookId__bookId=bookid)
|
||||
borrowitems = BorrowItem.objects.filter(bookId__bookId=bookid,userId__userId__username=userid).exclude(hasReturned=True)
|
||||
if len(borrowitems)==0:
|
||||
return HttpResponse("you have not borrow this book")
|
||||
for borrowitem in borrowitems:
|
||||
if borrowitem.hasReturned:
|
||||
continue
|
||||
else:
|
||||
borrowitem.hasReturned = True
|
||||
borrowitem.save()
|
||||
bookNumItem.bookNum += 1
|
||||
bookNumItem.save()
|
||||
return HttpResponse(json.dumps({'end':True}),content_type="application/json")
|
||||
else:
|
||||
return HttpResponse("has no perm")
|
||||
else:
|
||||
return HttpResponse("you have no perm")
|
||||
else:
|
||||
return HttpResponse("login Page,you are not login already")
|
||||
def getTypeOptions(request):
|
||||
if request.user.is_authenticated():
|
||||
ans=[]
|
||||
options = BookType.objects.all()
|
||||
for option in options:
|
||||
ans.append({"num":option.TypeNum,"optionName":option.TypeName})
|
||||
return HttpResponse(json.dumps(ans),content_type="application/json")
|
||||
else:
|
||||
return HttpResponse("login Page,you are not login already")
|
||||
def staffViewUserDetail(request):
|
||||
if request.user.is_authenticated():
|
||||
currentUser = request.user
|
||||
if currentUser.is_staff:
|
||||
try:
|
||||
userid = request.GET['userid']
|
||||
except:
|
||||
return HttpResponseRedirect('/main')
|
||||
currentLoginUser = {'userId':currentUser.username,
|
||||
'userName':StaffInfo.objects.get(staffId=currentUser).staffName}
|
||||
userAuth = authUser.objects.get(username=userid)
|
||||
userInfoFK = UserInfo.objects.get(userId=userAuth)
|
||||
borrowList = BorrowItem.objects.filter(userId=userInfoFK).order_by('borrowItemId')
|
||||
userinfo = {'userid':userAuth.username,
|
||||
'username':userInfoFK.userName,
|
||||
'email':userAuth.email,
|
||||
'sex':userInfoFK.userSex,
|
||||
'age':userInfoFK.userAge,
|
||||
'pn':userInfoFK.userPhoneNum,
|
||||
'time':userInfoFK.userRegistTime.strftime('%Y-%m-%d')}
|
||||
borrowInfoList = []
|
||||
for i,borrowItem in enumerate(borrowList):
|
||||
borrowInfoList.append({'bookName':borrowItem.bookId.bookName,
|
||||
'itemNum':i+1,
|
||||
'staffId':borrowItem.staffId.staffId.username,
|
||||
'hasReturn':borrowItem.hasReturned})
|
||||
borrowInfoList.reverse()
|
||||
return render(request,'userDetail.html',{'userInfo':userinfo,'borrowList':borrowInfoList,'currentUser':currentLoginUser,'is_staff':True})
|
||||
else:
|
||||
userid = currentUser.username
|
||||
currentLoginUser = {'userId':currentUser.username,
|
||||
'userName':UserInfo.objects.get(userId=currentUser).userName}
|
||||
userAuth = authUser.objects.get(username=userid)
|
||||
userInfoFK = UserInfo.objects.get(userId=userAuth)
|
||||
borrowList = BorrowItem.objects.filter(userId=userInfoFK).order_by('borrowItemId')
|
||||
userinfo = {'userid':userAuth.username,
|
||||
'username':userInfoFK.userName,
|
||||
'email':userAuth.email,
|
||||
'sex':userInfoFK.userSex,
|
||||
'age':userInfoFK.userAge,
|
||||
'pn':userInfoFK.userPhoneNum,
|
||||
'time':userInfoFK.userRegistTime.strftime('%Y-%m-%d')}
|
||||
borrowInfoList = []
|
||||
for i,borrowItem in enumerate(borrowList):
|
||||
borrowInfoList.append({'bookName':borrowItem.bookId.bookName,
|
||||
'itemNum':i+1,
|
||||
'staffId':borrowItem.staffId.staffId.username,
|
||||
'hasReturn':borrowItem.hasReturned})
|
||||
borrowInfoList.reverse()
|
||||
return render(request,'userDetail.html',{'userInfo':userinfo,'borrowList':borrowInfoList,'currentUser':currentLoginUser,'is_staff':False})
|
||||
else:
|
||||
return HttpResponseRedirect("/login")
|
||||
|
||||
def staffViewUser(request):
|
||||
if request.user.is_authenticated():
|
||||
currentUser = request.user
|
||||
if currentUser.is_staff:
|
||||
try:
|
||||
username = request.GET['username']
|
||||
offset = request.GET['offset']
|
||||
startPage = request.GET['startPage']
|
||||
except:
|
||||
return HttpResponse('startPage get error')
|
||||
currentPage = int(startPage)
|
||||
if username == '':
|
||||
scanUser = UserInfo.objects.all().order_by('userName')
|
||||
else:
|
||||
scanUser = UserInfo.objects.filter(userName__contains = username)
|
||||
userPagi = Paginator(scanUser,int(offset))
|
||||
pageN = userPagi.page(currentPage)
|
||||
after_range_num = 5
|
||||
befor_range_num = 4
|
||||
scanUserList = pageN.object_list
|
||||
ansUserList = []
|
||||
for userItem in scanUserList:
|
||||
ansUserList.append({'userid':userItem.userId.username,
|
||||
'username':userItem.userName,
|
||||
'usersex':userItem.userSex,
|
||||
'userage':userItem.userAge})
|
||||
if currentPage-1>after_range_num:
|
||||
pageList = userPagi.page_range[currentPage-1-after_range_num:currentPage-1+befor_range_num]
|
||||
else:
|
||||
pageList = userPagi.page_range[0:currentPage-1+befor_range_num]
|
||||
ans = {'userList':ansUserList,'pageList':pageList,'currentPage':currentPage}
|
||||
return HttpResponse(json.dumps(ans),content_type="application/json")
|
||||
else:
|
||||
return HttpResponse('not staff')
|
||||
else:
|
||||
return HttpResponse('not login')
|
||||
|
||||
def staffChangeBookInfo(request):
|
||||
if request.user.is_authenticated():
|
||||
currentUser = request.user
|
||||
if currentUser.is_staff:
|
||||
if currentUser.has_perms(["main.change_book","main.change_booknum"]):
|
||||
try:
|
||||
bookid = request.GET['bookid']
|
||||
bookname = request.GET['bookname']
|
||||
booktype = request.GET['booktype']
|
||||
bookpub = request.GET['bookpublisher']
|
||||
bookauthor = request.GET['bookauthor']
|
||||
bookintro = request.GET['bookintroduction']
|
||||
bookprice = request.GET['bookprice']
|
||||
booknum = request.GET['booknum']
|
||||
except:
|
||||
return HttpResponse("get error")
|
||||
bookFK = Book.objects.get(bookId=bookid)
|
||||
bookNumFK = BookNum.objects.get(bookId__bookId=bookid)
|
||||
bookFK.bookName = bookname
|
||||
bookFK.bookType = BookType.objects.get(TypeNum=booktype)
|
||||
bookFK.bookPublisher = bookpub
|
||||
bookFK.bookAuthor = bookauthor
|
||||
bookFK.bookIntroduction = bookintro
|
||||
bookFK.bookPrice = bookprice
|
||||
bookFK.save()
|
||||
bookNumFK.bookNum = booknum
|
||||
bookNumFK.save()
|
||||
return HttpResponse("success!")
|
||||
else:
|
||||
return HttpResponse("has no perm")
|
||||
else:
|
||||
return HttpResponse("you have no perm")
|
||||
else:
|
||||
return HttpResponse("login Page,you are not login already")
|
||||
@@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env python
|
||||
import os
|
||||
import sys
|
||||
|
||||
if __name__ == "__main__":
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Lib.settings")
|
||||
|
||||
from django.core.management import execute_from_command_line
|
||||
|
||||
execute_from_command_line(sys.argv)
|
||||
Generated
+460
@@ -0,0 +1,460 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="7786e6ac-9c02-49bb-8bcf-d59831dd8308" name="Default Changelist" comment="" />
|
||||
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||
</component>
|
||||
<component name="DjangoConsoleOptions" custom-start-script="import sys; print('Python %s on %s' % (sys.version, sys.platform)) import django; print('Django %s' % django.get_version()) sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS]) if 'setup' in dir(django): django.setup() import django_manage_shell; django_manage_shell.run(PROJECT_ROOT)">
|
||||
<option name="myCustomStartScript" value="import sys; print('Python %s on %s' % (sys.version, sys.platform)) import django; print('Django %s' % django.get_version()) sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS]) if 'setup' in dir(django): django.setup() import django_manage_shell; django_manage_shell.run(PROJECT_ROOT)" />
|
||||
</component>
|
||||
<component name="FileEditorManager">
|
||||
<splitter split-orientation="horizontal" split-proportion="0.5">
|
||||
<split-first>
|
||||
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/Django_study/settings.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="1064">
|
||||
<caret line="56" column="47" selection-start-line="56" selection-start-column="47" selection-end-line="56" selection-end-column="47" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/Django_study/urls.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="399">
|
||||
<caret line="25" column="36" selection-start-line="25" selection-start-column="36" selection-end-line="25" selection-end-column="36" />
|
||||
<folding>
|
||||
<element signature="e#636#668#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/static/main.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="627">
|
||||
<caret line="33" column="35" selection-start-line="33" selection-start-column="35" selection-end-line="33" selection-end-column="35" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/Django_study/wsgi.py">
|
||||
<provider selected="true" editor-type-id="text-editor" />
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/Django_study/asgi.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="228">
|
||||
<caret line="12" column="14" selection-start-line="12" selection-start-column="14" selection-end-line="12" selection-end-column="14" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/Django_study/websocket.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="133">
|
||||
<caret line="7" column="46" selection-start-line="7" selection-start-column="46" selection-end-line="7" selection-end-column="46" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/Django_study/views.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="38">
|
||||
<caret line="6" column="36" selection-start-line="6" selection-start-column="36" selection-end-line="6" selection-end-column="47" />
|
||||
<folding>
|
||||
<element signature="e#0#9#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://E:/anaconda3/Lib/site-packages/django/shortcuts.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="152">
|
||||
<caret line="13" column="4" selection-start-line="13" selection-start-column="4" selection-end-line="13" selection-end-column="4" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/static/index.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="171">
|
||||
<caret line="44" column="35" selection-start-line="44" selection-start-column="35" selection-end-line="44" selection-end-column="35" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/manage.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state>
|
||||
<folding>
|
||||
<element signature="e#84#93#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
</leaf>
|
||||
</split-first>
|
||||
<split-second>
|
||||
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
|
||||
<file pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/static/main.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="152">
|
||||
<caret line="17" column="39" selection-start-line="17" selection-start-column="39" selection-end-line="17" selection-end-column="39" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
</leaf>
|
||||
</split-second>
|
||||
</splitter>
|
||||
</component>
|
||||
<component name="FileTemplateManagerImpl">
|
||||
<option name="RECENT_TEMPLATES">
|
||||
<list>
|
||||
<option value="HTML File" />
|
||||
<option value="Python Script" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="FindInProjectRecents">
|
||||
<findStrings>
|
||||
<find>chat-se</find>
|
||||
</findStrings>
|
||||
</component>
|
||||
<component name="Git.Settings">
|
||||
<option name="UPDATE_TYPE" value="MERGE" />
|
||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/.." />
|
||||
</component>
|
||||
<component name="GithubDefaultAccount">
|
||||
<option name="defaultAccountId" value="b9527185-5ce6-4015-ab20-98c48e37a715" />
|
||||
</component>
|
||||
<component name="IdeDocumentHistory">
|
||||
<option name="CHANGED_PATHS">
|
||||
<list>
|
||||
<option value="$PROJECT_DIR$/Django_study/temp.html" />
|
||||
<option value="$PROJECT_DIR$/Django_study/webscoket.py" />
|
||||
<option value="$PROJECT_DIR$/Django_study/websocket.py" />
|
||||
<option value="$PROJECT_DIR$/Django_study/asgi.py" />
|
||||
<option value="$PROJECT_DIR$/Django_study/settings.py" />
|
||||
<option value="$PROJECT_DIR$/Django_study/views.py" />
|
||||
<option value="$PROJECT_DIR$/static/index.html" />
|
||||
<option value="$PROJECT_DIR$/static/main.html" />
|
||||
<option value="$PROJECT_DIR$/Django_study/urls.py" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectFrameBounds" extendedState="6">
|
||||
<option name="x" value="-9" />
|
||||
<option name="width" value="978" />
|
||||
<option name="height" value="1039" />
|
||||
</component>
|
||||
<component name="ProjectLevelVcsManager" settingsEditedManually="true">
|
||||
<ConfirmationsSetting value="2" id="Add" />
|
||||
</component>
|
||||
<component name="ProjectView">
|
||||
<navigator proportions="" version="1">
|
||||
<foldersAlwaysOnTop value="true" />
|
||||
</navigator>
|
||||
<panes>
|
||||
<pane id="Scope" />
|
||||
<pane id="ProjectPane">
|
||||
<subPane>
|
||||
<expand>
|
||||
<path>
|
||||
<item name="ChatSystem聊天系统" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="ChatSystem聊天系统" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="ChatSystem聊天系统" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="ChatSystem聊天系统" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="Django_study" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="ChatSystem聊天系统" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="ChatSystem聊天系统" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="static" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
</expand>
|
||||
<select />
|
||||
</subPane>
|
||||
</pane>
|
||||
</panes>
|
||||
</component>
|
||||
<component name="PropertiesComponent">
|
||||
<property name="ASKED_SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
|
||||
<property name="DefaultHtmlFileTemplate" value="HTML File" />
|
||||
<property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
|
||||
<property name="WebServerToolWindowFactoryState" value="false" />
|
||||
<property name="last_opened_file_path" value="$PROJECT_DIR$/../../../Projects/facedetection" />
|
||||
<property name="node.js.detected.package.eslint" value="true" />
|
||||
<property name="node.js.detected.package.tslint" value="true" />
|
||||
<property name="node.js.path.for.package.eslint" value="project" />
|
||||
<property name="node.js.path.for.package.tslint" value="project" />
|
||||
<property name="node.js.selected.package.eslint" value="(autodetect)" />
|
||||
<property name="node.js.selected.package.tslint" value="(autodetect)" />
|
||||
<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="settings.editor.selected.configurable" value="settings.github" />
|
||||
</component>
|
||||
<component name="RecentsManager">
|
||||
<key name="MoveFile.RECENT_KEYS">
|
||||
<recent name="E:\study\项目\Django_study\static" />
|
||||
</key>
|
||||
</component>
|
||||
<component name="RunDashboard">
|
||||
<option name="ruleStates">
|
||||
<list>
|
||||
<RuleState>
|
||||
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
|
||||
</RuleState>
|
||||
<RuleState>
|
||||
<option name="name" value="StatusDashboardGroupingRule" />
|
||||
</RuleState>
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="RunManager">
|
||||
<configuration name="Django_study" type="Python.DjangoServer" factoryName="Django server">
|
||||
<module name="Django_study" />
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
<option name="PARENT_ENVS" value="true" />
|
||||
<envs>
|
||||
<env name="PYTHONUNBUFFERED" value="1" />
|
||||
<env name="DJANGO_SETTINGS_MODULE" value="Django_study.settings" />
|
||||
</envs>
|
||||
<option name="SDK_HOME" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="" />
|
||||
<option name="IS_MODULE_SDK" value="false" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<option name="launchJavascriptDebuger" value="false" />
|
||||
<option name="port" value="8000" />
|
||||
<option name="host" value="" />
|
||||
<option name="additionalOptions" value="" />
|
||||
<option name="browserUrl" value="" />
|
||||
<option name="runTestServer" value="false" />
|
||||
<option name="runNoReload" value="false" />
|
||||
<option name="useCustomRunCommand" value="false" />
|
||||
<option name="customRunCommand" value="" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
</component>
|
||||
<component name="SvnConfiguration">
|
||||
<configuration />
|
||||
</component>
|
||||
<component name="TaskManager">
|
||||
<task active="true" id="Default" summary="Default task">
|
||||
<changelist id="7786e6ac-9c02-49bb-8bcf-d59831dd8308" name="Default Changelist" comment="" />
|
||||
<created>1593874890797</created>
|
||||
<option name="number" value="Default" />
|
||||
<option name="presentableId" value="Default" />
|
||||
<updated>1593874890797</updated>
|
||||
<workItem from="1593875045551" duration="3170000" />
|
||||
<workItem from="1594004132536" duration="717000" />
|
||||
<workItem from="1594085801795" duration="1347000" />
|
||||
<workItem from="1594222029049" duration="2678000" />
|
||||
<workItem from="1594260509067" duration="1828000" />
|
||||
<workItem from="1594366425108" duration="4092000" />
|
||||
<workItem from="1594645302171" duration="15204000" />
|
||||
<workItem from="1595578099787" duration="1237000" />
|
||||
<workItem from="1595579521779" duration="20000" />
|
||||
</task>
|
||||
<task id="LOCAL-00001" summary="login">
|
||||
<created>1594222552893</created>
|
||||
<option name="number" value="00001" />
|
||||
<option name="presentableId" value="LOCAL-00001" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1594222552893</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00002" summary="login2">
|
||||
<created>1594224444770</created>
|
||||
<option name="number" value="00002" />
|
||||
<option name="presentableId" value="LOCAL-00002" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1594224444770</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00003" summary="update the main.html">
|
||||
<created>1594384008226</created>
|
||||
<option name="number" value="00003" />
|
||||
<option name="presentableId" value="LOCAL-00003" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1594384008226</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00004" summary="achieve websocket">
|
||||
<created>1594658638433</created>
|
||||
<option name="number" value="00004" />
|
||||
<option name="presentableId" value="LOCAL-00004" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1594658638433</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00005" summary="fixed some bugs">
|
||||
<created>1594662319634</created>
|
||||
<option name="number" value="00005" />
|
||||
<option name="presentableId" value="LOCAL-00005" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1594662319635</updated>
|
||||
</task>
|
||||
<option name="localTasksCounter" value="6" />
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TimeTrackingManager">
|
||||
<option name="totallyTimeSpent" value="30293000" />
|
||||
</component>
|
||||
<component name="ToolWindowManager">
|
||||
<frame x="-7" y="-7" width="1550" height="838" extended-state="6" />
|
||||
<layout>
|
||||
<window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.11997319" />
|
||||
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
|
||||
<window_info id="Favorites" order="2" side_tool="true" />
|
||||
<window_info anchor="bottom" id="Message" order="0" />
|
||||
<window_info anchor="bottom" id="Find" order="1" />
|
||||
<window_info anchor="bottom" id="Run" order="2" sideWeight="0.5093834" weight="0.33002833" />
|
||||
<window_info anchor="bottom" id="Debug" order="3" sideWeight="0.49932975" weight="0.39943343" />
|
||||
<window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
|
||||
<window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
|
||||
<window_info anchor="bottom" id="TODO" order="6" />
|
||||
<window_info anchor="bottom" id="Docker" order="7" show_stripe_button="false" />
|
||||
<window_info anchor="bottom" id="Version Control" order="8" />
|
||||
<window_info anchor="bottom" id="Database Changes" order="9" />
|
||||
<window_info active="true" anchor="bottom" id="Event Log" order="10" sideWeight="0.49061662" side_tool="true" visible="true" weight="0.33002833" />
|
||||
<window_info anchor="bottom" id="Concurrent Activities Diagram" order="11" weight="0.32956153" />
|
||||
<window_info anchor="bottom" id="Terminal" order="12" sideWeight="0.49932975" weight="0.3286119" />
|
||||
<window_info anchor="bottom" id="Python Console" order="13" sideWeight="0.49932975" weight="0.3286119" />
|
||||
<window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
|
||||
<window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
|
||||
<window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
|
||||
<window_info anchor="right" id="SciView" order="3" />
|
||||
<window_info anchor="right" id="Database" order="4" />
|
||||
</layout>
|
||||
</component>
|
||||
<component name="TypeScriptGeneratedFilesManager">
|
||||
<option name="version" value="1" />
|
||||
</component>
|
||||
<component name="VcsManagerConfiguration">
|
||||
<MESSAGE value="login" />
|
||||
<MESSAGE value="login2" />
|
||||
<MESSAGE value="update the main.html" />
|
||||
<MESSAGE value="achieve websocket" />
|
||||
<MESSAGE value="fixed some bugs" />
|
||||
<option name="LAST_COMMIT_MESSAGE" value="fixed some bugs" />
|
||||
</component>
|
||||
<component name="XDebuggerManager">
|
||||
<breakpoint-manager>
|
||||
<breakpoints>
|
||||
<line-breakpoint enabled="true" type="javascript">
|
||||
<url>file://$PROJECT_DIR$/static/main.html</url>
|
||||
<line>41</line>
|
||||
<option name="timeStamp" value="2" />
|
||||
</line-breakpoint>
|
||||
</breakpoints>
|
||||
</breakpoint-manager>
|
||||
</component>
|
||||
<component name="editorHistoryManager">
|
||||
<entry file="file://E:/anaconda3/Lib/site-packages/django/core/asgi.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="209">
|
||||
<caret line="12" column="24" lean-forward="true" selection-start-line="12" selection-start-column="24" selection-end-line="12" selection-end-column="24" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$APPLICATION_HOME_DIR$/plugins/JavaScriptLanguage/jsLanguageServicesImpl/external/lib.dom.d.ts">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="19">
|
||||
<caret line="16812" column="4" selection-start-line="16812" selection-start-column="4" selection-end-line="16812" selection-end-column="4" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/Django_study/settings.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="1064">
|
||||
<caret line="56" column="47" selection-start-line="56" selection-start-column="47" selection-end-line="56" selection-end-column="47" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/Django_study/urls.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="399">
|
||||
<caret line="25" column="36" selection-start-line="25" selection-start-column="36" selection-end-line="25" selection-end-column="36" />
|
||||
<folding>
|
||||
<element signature="e#636#668#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/Django_study/wsgi.py">
|
||||
<provider selected="true" editor-type-id="text-editor" />
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/Django_study/asgi.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="228">
|
||||
<caret line="12" column="14" selection-start-line="12" selection-start-column="14" selection-end-line="12" selection-end-column="14" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/Django_study/websocket.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="133">
|
||||
<caret line="7" column="46" selection-start-line="7" selection-start-column="46" selection-end-line="7" selection-end-column="46" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/Django_study/views.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="38">
|
||||
<caret line="6" column="36" selection-start-line="6" selection-start-column="36" selection-end-line="6" selection-end-column="47" />
|
||||
<folding>
|
||||
<element signature="e#0#9#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://E:/anaconda3/Lib/site-packages/django/shortcuts.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="152">
|
||||
<caret line="13" column="4" selection-start-line="13" selection-start-column="4" selection-end-line="13" selection-end-column="4" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/manage.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state>
|
||||
<folding>
|
||||
<element signature="e#84#93#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/static/index.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="171">
|
||||
<caret line="44" column="35" selection-start-line="44" selection-start-column="35" selection-end-line="44" selection-end-column="35" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/static/main.html">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="152">
|
||||
<caret line="17" column="39" selection-start-line="17" selection-start-column="39" selection-end-line="17" selection-end-column="39" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</component>
|
||||
</project>
|
||||
@@ -0,0 +1,3 @@
|
||||
__pycache__/
|
||||
*.idea
|
||||
/.idea/
|
||||
@@ -0,0 +1,12 @@
|
||||
# StudentSystem
|
||||
学生管理系统
|
||||
model:
|
||||
学生基本信息表
|
||||
学生登录信息表
|
||||
学生专业成绩表
|
||||
|
||||
功能:
|
||||
学生信息的增删改查
|
||||
|
||||
作用:
|
||||
可用于初学者练习
|
||||
@@ -0,0 +1,5 @@
|
||||
*.idea
|
||||
/.idea/
|
||||
/__pycache__/
|
||||
__pycache__/
|
||||
__pycache__
|
||||
@@ -0,0 +1,131 @@
|
||||
"""
|
||||
Django settings for StudentSystem project.
|
||||
|
||||
Generated by 'django-admin startproject' using Django 2.1.7.
|
||||
|
||||
For more information on this file, see
|
||||
https://docs.djangoproject.com/en/2.1/topics/settings/
|
||||
|
||||
For the full list of settings and their values, see
|
||||
https://docs.djangoproject.com/en/2.1/ref/settings/
|
||||
"""
|
||||
|
||||
import os
|
||||
|
||||
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
||||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
|
||||
# Quick-start development settings - unsuitable for production
|
||||
# See https://docs.djangoproject.com/en/2.1/howto/deployment/checklist/
|
||||
|
||||
# SECURITY WARNING: keep the secret key used in production secret!
|
||||
SECRET_KEY = '3%i9ky+d^l3ryt5$1a&3g*(=(w@_h0ts9gh$gjt-@gdtjgs99_'
|
||||
|
||||
# SECURITY WARNING: don't run with debug turned on in production!
|
||||
DEBUG = True
|
||||
|
||||
ALLOWED_HOSTS = ['*']
|
||||
|
||||
|
||||
# Application definition
|
||||
|
||||
INSTALLED_APPS = [
|
||||
'django.contrib.admin',
|
||||
'django.contrib.auth',
|
||||
'django.contrib.contenttypes',
|
||||
'django.contrib.sessions',
|
||||
'django.contrib.messages',
|
||||
'django.contrib.staticfiles',
|
||||
'studentManagement',
|
||||
]
|
||||
|
||||
MIDDLEWARE = [
|
||||
'django.middleware.security.SecurityMiddleware',
|
||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||
'django.middleware.common.CommonMiddleware',
|
||||
'django.middleware.csrf.CsrfViewMiddleware',
|
||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||
'django.contrib.messages.middleware.MessageMiddleware',
|
||||
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||
]
|
||||
|
||||
ROOT_URLCONF = 'StudentSystem.urls'
|
||||
|
||||
TEMPLATES = [
|
||||
{
|
||||
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
||||
'DIRS': [os.path.join(BASE_DIR, 'templates')],
|
||||
'APP_DIRS': True,
|
||||
'OPTIONS': {
|
||||
'context_processors': [
|
||||
'django.template.context_processors.debug',
|
||||
'django.template.context_processors.request',
|
||||
'django.contrib.auth.context_processors.auth',
|
||||
'django.contrib.messages.context_processors.messages',
|
||||
],
|
||||
},
|
||||
},
|
||||
]
|
||||
|
||||
WSGI_APPLICATION = 'StudentSystem.wsgi.application'
|
||||
|
||||
|
||||
# Database
|
||||
# https://docs.djangoproject.com/en/2.1/ref/settings/#databases
|
||||
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.mysql',
|
||||
'NAME': 'studentmanager',
|
||||
'USER': 'root',
|
||||
'PASSWORD': '123456'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# Password validation
|
||||
# https://docs.djangoproject.com/en/2.1/ref/settings/#auth-password-validators
|
||||
|
||||
AUTH_PASSWORD_VALIDATORS = [
|
||||
{
|
||||
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
|
||||
},
|
||||
{
|
||||
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
|
||||
},
|
||||
{
|
||||
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
|
||||
},
|
||||
{
|
||||
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
# Internationalization
|
||||
# https://docs.djangoproject.com/en/2.1/topics/i18n/
|
||||
|
||||
LANGUAGE_CODE = 'zh-hans'
|
||||
|
||||
TIME_ZONE = 'Asia/Shanghai'
|
||||
|
||||
USE_I18N = True
|
||||
|
||||
USE_L10N = True
|
||||
|
||||
USE_TZ = True
|
||||
|
||||
|
||||
# Static files (CSS, JavaScript, Images)
|
||||
# https://docs.djangoproject.com/en/2.1/howto/static-files/
|
||||
|
||||
STATIC_URL = '/static/'
|
||||
STATICFILES_DIRS = [
|
||||
|
||||
os.path.join(BASE_DIR, 'static')
|
||||
]
|
||||
|
||||
if __name__=='__main__':
|
||||
print(os.path.join(BASE_DIR, 'static'))
|
||||
print('h')
|
||||
@@ -0,0 +1,25 @@
|
||||
"""StudentSystem URL Configuration
|
||||
|
||||
The `urlpatterns` list routes URLs to views. For more information please see:
|
||||
https://docs.djangoproject.com/en/2.1/topics/http/urls/
|
||||
Examples:
|
||||
Function views
|
||||
1. Add an import: from my_app import views
|
||||
2. Add a URL to urlpatterns: path('', views.home, name='home')
|
||||
Class-based views
|
||||
1. Add an import: from other_app.views import Home
|
||||
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
|
||||
Including another URLconf
|
||||
1. Import the include() function: from django.urls import include, path
|
||||
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
||||
"""
|
||||
from django.contrib import admin
|
||||
from django.urls import path, include
|
||||
from django.conf.urls import url
|
||||
urlpatterns = [
|
||||
path('', include('studentManagement.urls', namespace='student')),
|
||||
path('student/', include('studentManagement.urls')),
|
||||
path('admin/', admin.site.urls)
|
||||
# url(r'^admin/', admin.site.urls),
|
||||
# url(r'^', include('studentManagement.urls', namespace='student'))
|
||||
]
|
||||
@@ -0,0 +1,16 @@
|
||||
"""
|
||||
WSGI config for StudentSystem project.
|
||||
|
||||
It exposes the WSGI callable as a module-level variable named ``application``.
|
||||
|
||||
For more information on this file, see
|
||||
https://docs.djangoproject.com/en/2.1/howto/deployment/wsgi/
|
||||
"""
|
||||
|
||||
import os
|
||||
|
||||
from django.core.wsgi import get_wsgi_application
|
||||
|
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'StudentSystem.settings')
|
||||
|
||||
application = get_wsgi_application()
|
||||
@@ -0,0 +1,15 @@
|
||||
#!/usr/bin/env python
|
||||
import os
|
||||
import sys
|
||||
|
||||
if __name__ == '__main__':
|
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'StudentSystem.settings')
|
||||
try:
|
||||
from django.core.management import execute_from_command_line
|
||||
except ImportError as exc:
|
||||
raise ImportError(
|
||||
"Couldn't import Django. Are you sure it's installed and "
|
||||
"available on your PYTHONPATH environment variable? Did you "
|
||||
"forget to activate a virtual environment?"
|
||||
) from exc
|
||||
execute_from_command_line(sys.argv)
|
||||
@@ -0,0 +1,31 @@
|
||||
from django.contrib import admin
|
||||
from studentManagement.models import StudentInformationModel, CourseModel, StudentModel
|
||||
# Register your models here.
|
||||
|
||||
class StudentInformationLine(admin.TabularInline):
|
||||
model = CourseModel
|
||||
extra = 3
|
||||
|
||||
|
||||
class StudentInformationAdmin(admin.ModelAdmin):
|
||||
# 显示的字段,先后顺序表示显示顺序
|
||||
list_display = ['stu_id', 'stu_name', 'stu_phone', 'str_addr', 'stu_faculty', 'stu_major']
|
||||
# 以哪个来过滤
|
||||
list_filter = ['stu_id', 'stu_name']
|
||||
# 以哪个字段来搜索,admin中就会出现一个搜索栏
|
||||
search_fields = ['stu_name', 'str_addr', 'stu_faculty', 'stu_major']
|
||||
list_per_page = 5
|
||||
|
||||
class CourseAdmin(admin.ModelAdmin):
|
||||
list_display = ['cour_id', 'course', 'grade']
|
||||
# inlines = [StudentInformationLine, ] # 谁的外键就写在哪边
|
||||
|
||||
class StudentAdmin(admin.ModelAdmin):
|
||||
list_display = ['stu_id', 'username', 'password']
|
||||
search_fields = ['stu_id', 'username']
|
||||
actions_on_top = False
|
||||
actions_on_bottom = True
|
||||
|
||||
admin.site.register(StudentInformationModel, StudentInformationAdmin)
|
||||
admin.site.register(CourseModel, CourseAdmin)
|
||||
admin.site.register(StudentModel, StudentAdmin)
|
||||
@@ -0,0 +1,5 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class StudentmanagementConfig(AppConfig):
|
||||
name = 'studentManagement'
|
||||
@@ -0,0 +1,52 @@
|
||||
# Generated by Django 3.0.3 on 2020-08-03 09:06
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='CourseModel',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('cour_id', models.CharField(max_length=15, verbose_name='学生ID')),
|
||||
('course', models.CharField(max_length=30, verbose_name='课程')),
|
||||
('grade', models.IntegerField(default=60, verbose_name='分数')),
|
||||
],
|
||||
options={
|
||||
'db_table': 'course',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='StudentInformationModel',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('stu_id', models.CharField(max_length=15, verbose_name='学生ID')),
|
||||
('stu_name', models.CharField(max_length=30, verbose_name='学生姓名')),
|
||||
('stu_phone', models.CharField(max_length=20, verbose_name='学生电话')),
|
||||
('str_addr', models.TextField(verbose_name='学生地址')),
|
||||
('stu_faculty', models.CharField(max_length=20, verbose_name='院系')),
|
||||
('stu_major', models.CharField(max_length=30, verbose_name='专业')),
|
||||
],
|
||||
options={
|
||||
'db_table': 'studentinformation',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='StudentModel',
|
||||
fields=[
|
||||
('stu_id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('username', models.CharField(max_length=10, verbose_name='用户名')),
|
||||
('password', models.CharField(max_length=10, verbose_name='密码')),
|
||||
],
|
||||
options={
|
||||
'db_table': 'student',
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,34 @@
|
||||
from django.db import models
|
||||
|
||||
# Create your models here.
|
||||
# 课程表
|
||||
class CourseModel(models.Model):
|
||||
cour_id = models.CharField(max_length=15, verbose_name='学生ID')
|
||||
course = models.CharField(max_length=30, verbose_name='课程')
|
||||
grade = models.IntegerField(default=60, verbose_name='分数')
|
||||
class Meta():
|
||||
db_table = 'course'
|
||||
def __str__(self):
|
||||
return '学生Id: 课程: 分数: '.format(self.cour_id, self.course, self.grade)
|
||||
|
||||
# 学生信息表
|
||||
class StudentInformationModel(models.Model):
|
||||
stu_id = models.CharField(max_length=15, verbose_name='学生ID')
|
||||
stu_name = models.CharField(max_length=30, verbose_name='学生姓名')
|
||||
stu_phone = models.CharField(max_length=20, verbose_name='学生电话')
|
||||
str_addr = models.TextField(verbose_name='学生地址')
|
||||
stu_faculty = models.CharField(max_length=20, verbose_name='院系')
|
||||
stu_major = models.CharField(max_length=30, verbose_name='专业')
|
||||
# 取消外键(外键是可用的)
|
||||
# stu_course = models.ForeignKey('CourseModel', on_delete=True)
|
||||
class Meta():
|
||||
db_table = 'studentinformation'
|
||||
|
||||
# 学生用户名密码表
|
||||
class StudentModel(models.Model):
|
||||
stu_id = models.AutoField(primary_key=True)
|
||||
username = models.CharField(max_length=10, verbose_name='用户名')
|
||||
password = models.CharField(max_length=10, verbose_name='密码')
|
||||
class Meta():
|
||||
db_table = 'student'
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
@@ -0,0 +1,15 @@
|
||||
from django.urls import path
|
||||
from studentManagement import views
|
||||
from django.conf.urls import url
|
||||
app_name = 'studentManager'
|
||||
urlpatterns = [
|
||||
path('', views.index),
|
||||
path('index/', views.index, name='index'),
|
||||
path('login/', views.login, name='login'),
|
||||
path('regist/', views.regist, name='regist'),
|
||||
path('logout/', views.logout, name='logout'),
|
||||
path('add/', views.add, name='add'),
|
||||
path('select/', views.select, name='select'),
|
||||
path('delete/', views.delete, name='delete'),
|
||||
path('update/', views.update, name='update')
|
||||
]
|
||||
@@ -0,0 +1,29 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Title</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>请在下列信息栏中填入学生的基本信息</h1>
|
||||
<form method="post" action="{% url 'student:add' %}">
|
||||
{% csrf_token %}
|
||||
学生学号:<input type="text" name="stu_id"/><br>
|
||||
学生姓名:<input type="text" name="stu_name"/><br>
|
||||
{% if msg %}
|
||||
<h5>{{ msg }}</h5><br>
|
||||
{% endif %}
|
||||
学生电话:<input type="text" name="stu_phone"/><br>
|
||||
学生地址:<input type="text" name="str_addr"/><br>
|
||||
学生院系:<input type="text" name="stu_faculty"/><br>
|
||||
学生专业:<input type="text" name="stu_major"/><br>
|
||||
<input class="bc" type="submit" value="保存"/>
|
||||
{% if error %}
|
||||
<h5>{{ error }}</h5><br>
|
||||
{% endif %}
|
||||
{% if sucess %}
|
||||
<h5>{{ sucess }}</h5><br>
|
||||
{% endif %}
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,18 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Title</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>请输入你要想要删除的学生学号</h1>
|
||||
<form method="post" action="/student/delete/">
|
||||
{% csrf_token %}
|
||||
学生学号:<input type="text" name="stu_id" placeholder={{ id }}><br>
|
||||
<input class="bc" type="submit" value="删除">
|
||||
</form>
|
||||
{% if msg %}
|
||||
{{ msg }}
|
||||
{% endif %}
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,22 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Title</title>
|
||||
</head>
|
||||
<body>
|
||||
<br>
|
||||
{% if lenght %}
|
||||
<a href="/student/logout/">退出</a><br>
|
||||
<h1 style="color: blue">欢迎{{ status}},来到学生信息管理系统</h1><br>
|
||||
<h3 style="color: green">请选择你要执行的功能</h3>
|
||||
<a href="{% url 'student:add' %}">增加学生信息</a><br>
|
||||
<a href="{% url 'student:select' %}">查询学生信息</a><br>
|
||||
<a href="{% url 'student:delete' %}">删除学生信息</a><br>
|
||||
<a href="{% url 'student:update' %}">修改学生信息</a><br>
|
||||
{% else %}
|
||||
<a href="student/login/">登录</a><br>
|
||||
<a href="student/regist/">注册</a><br>
|
||||
{% endif %}
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,16 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Title</title>
|
||||
</head>
|
||||
<body>
|
||||
你好: {{ status }}
|
||||
<form method="post" action="/student/login/">
|
||||
{% csrf_token %}
|
||||
<input type="text" name="username" placeholder="用户名:"/><br>
|
||||
<input type="password" name="password" placeholder="密 码:"/><br>
|
||||
<input class="tj" type="submit" value="登录"/>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,33 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Title</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>根据学号来查询学习基本信息及选课情况Izhe</h1>
|
||||
{% if not msg %}
|
||||
{# 判断是否由msg这个参数,或者判断其值,没有的话则执行这段代码#}
|
||||
<form method="post" action="/student/select/">
|
||||
{% csrf_token %}
|
||||
学生学号:<input type="text" name="stu_id" placeholder={{ id }}><br>
|
||||
<input class="bc" type="submit" value="查询">
|
||||
</form>
|
||||
{% else %}
|
||||
<ul>
|
||||
<li>学号: {{ stu_id }}</li>
|
||||
<li>姓名: {{ stu_name }}</li>
|
||||
<li>电话: {{ stu_phone }}</li>
|
||||
<li>地址: {{ str_addr }}</li>
|
||||
<li>院系: {{ stu_faculty }}</li>
|
||||
<li>专业: {{ stu_major }}</li>
|
||||
</ul>
|
||||
<hr>
|
||||
<ul>
|
||||
{% for k, v in course_data.items %}
|
||||
<li>{{ k }}: {{ v }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,23 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Title</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>根据学号来修改学生基本信息</h1>
|
||||
<form method="post" action="/student/update/">
|
||||
{% csrf_token %}
|
||||
学生学号:<input type="text" name="stu_id" placeholder={{ stu_id }}><br>
|
||||
学生姓名:<input type="text" name="stu_name" placeholder={{ stu_name }}><br>
|
||||
学生电话:<input type="text" name="stu_phone" placeholder={{ stu_phone }}><br>
|
||||
学生地址:<input type="text" name="stu_addr" placeholder={{ stu_addr }}><br>
|
||||
学生院系:<input type="text" name="stu_faculty" placeholder={{ stu_faculty }}><br>
|
||||
学生专业:<input type="text" name="stu_major" placeholder={{ stu_major }}><br>
|
||||
<input class="bc" type="submit" value="保存">
|
||||
</form>
|
||||
{% if msg %}
|
||||
{{ msg }}
|
||||
{% endif %}
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user