p8cfthmo3 4 weeks ago
parent 0084e21ca1
commit e8231203c6

14
model/.gitignore vendored

@ -0,0 +1,14 @@
/server/myapp/migrations
/server/myapp/views/__pycache__/
/server/.idea
/web/.idea
/web/dist
/web/node_modules
/server/.idea/
/.idea/
__pycache__
.idea
server/.idea
.DS_Store
server/.DS_Store
web/.DS_Store

@ -0,0 +1,782 @@
/*
Navicat Premium Data Transfer
Source Server : localhost
Source Server Type : MySQL
Source Server Version : 50737
Source Host : localhost:3306
Source Schema : python_team
Target Server Type : MySQL
Target Server Version : 50737
File Encoding : 65001
Date: 04/02/2024 17:29:54
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for auth_group
-- ----------------------------
DROP TABLE IF EXISTS `auth_group`;
CREATE TABLE `auth_group` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(150) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `name`(`name`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of auth_group
-- ----------------------------
-- ----------------------------
-- Table structure for auth_group_permissions
-- ----------------------------
DROP TABLE IF EXISTS `auth_group_permissions`;
CREATE TABLE `auth_group_permissions` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`group_id` int(11) NOT NULL,
`permission_id` int(11) NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `auth_group_permissions_group_id_permission_id_0cd325b0_uniq`(`group_id`, `permission_id`) USING BTREE,
INDEX `auth_group_permissio_permission_id_84c5c92e_fk_auth_perm`(`permission_id`) USING BTREE,
CONSTRAINT `auth_group_permissio_permission_id_84c5c92e_fk_auth_perm` FOREIGN KEY (`permission_id`) REFERENCES `auth_permission` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `auth_group_permissions_group_id_b120cbf9_fk_auth_group_id` FOREIGN KEY (`group_id`) REFERENCES `auth_group` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of auth_group_permissions
-- ----------------------------
-- ----------------------------
-- Table structure for auth_permission
-- ----------------------------
DROP TABLE IF EXISTS `auth_permission`;
CREATE TABLE `auth_permission` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`content_type_id` int(11) NOT NULL,
`codename` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `auth_permission_content_type_id_codename_01ab375a_uniq`(`content_type_id`, `codename`) USING BTREE,
CONSTRAINT `auth_permission_content_type_id_2f476e4b_fk_django_co` FOREIGN KEY (`content_type_id`) REFERENCES `django_content_type` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 85 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of auth_permission
-- ----------------------------
INSERT INTO `auth_permission` VALUES (1, 'Can add log entry', 1, 'add_logentry');
INSERT INTO `auth_permission` VALUES (2, 'Can change log entry', 1, 'change_logentry');
INSERT INTO `auth_permission` VALUES (3, 'Can delete log entry', 1, 'delete_logentry');
INSERT INTO `auth_permission` VALUES (4, 'Can view log entry', 1, 'view_logentry');
INSERT INTO `auth_permission` VALUES (5, 'Can add permission', 2, 'add_permission');
INSERT INTO `auth_permission` VALUES (6, 'Can change permission', 2, 'change_permission');
INSERT INTO `auth_permission` VALUES (7, 'Can delete permission', 2, 'delete_permission');
INSERT INTO `auth_permission` VALUES (8, 'Can view permission', 2, 'view_permission');
INSERT INTO `auth_permission` VALUES (9, 'Can add group', 3, 'add_group');
INSERT INTO `auth_permission` VALUES (10, 'Can change group', 3, 'change_group');
INSERT INTO `auth_permission` VALUES (11, 'Can delete group', 3, 'delete_group');
INSERT INTO `auth_permission` VALUES (12, 'Can view group', 3, 'view_group');
INSERT INTO `auth_permission` VALUES (13, 'Can add user', 4, 'add_user');
INSERT INTO `auth_permission` VALUES (14, 'Can change user', 4, 'change_user');
INSERT INTO `auth_permission` VALUES (15, 'Can delete user', 4, 'delete_user');
INSERT INTO `auth_permission` VALUES (16, 'Can view user', 4, 'view_user');
INSERT INTO `auth_permission` VALUES (17, 'Can add content type', 5, 'add_contenttype');
INSERT INTO `auth_permission` VALUES (18, 'Can change content type', 5, 'change_contenttype');
INSERT INTO `auth_permission` VALUES (19, 'Can delete content type', 5, 'delete_contenttype');
INSERT INTO `auth_permission` VALUES (20, 'Can view content type', 5, 'view_contenttype');
INSERT INTO `auth_permission` VALUES (21, 'Can add session', 6, 'add_session');
INSERT INTO `auth_permission` VALUES (22, 'Can change session', 6, 'change_session');
INSERT INTO `auth_permission` VALUES (23, 'Can delete session', 6, 'delete_session');
INSERT INTO `auth_permission` VALUES (24, 'Can view session', 6, 'view_session');
INSERT INTO `auth_permission` VALUES (25, 'Can add ad', 7, 'add_ad');
INSERT INTO `auth_permission` VALUES (26, 'Can change ad', 7, 'change_ad');
INSERT INTO `auth_permission` VALUES (27, 'Can delete ad', 7, 'delete_ad');
INSERT INTO `auth_permission` VALUES (28, 'Can view ad', 7, 'view_ad');
INSERT INTO `auth_permission` VALUES (29, 'Can add classification', 8, 'add_classification');
INSERT INTO `auth_permission` VALUES (30, 'Can change classification', 8, 'change_classification');
INSERT INTO `auth_permission` VALUES (31, 'Can delete classification', 8, 'delete_classification');
INSERT INTO `auth_permission` VALUES (32, 'Can view classification', 8, 'view_classification');
INSERT INTO `auth_permission` VALUES (33, 'Can add error log', 9, 'add_errorlog');
INSERT INTO `auth_permission` VALUES (34, 'Can change error log', 9, 'change_errorlog');
INSERT INTO `auth_permission` VALUES (35, 'Can delete error log', 9, 'delete_errorlog');
INSERT INTO `auth_permission` VALUES (36, 'Can view error log', 9, 'view_errorlog');
INSERT INTO `auth_permission` VALUES (37, 'Can add login log', 10, 'add_loginlog');
INSERT INTO `auth_permission` VALUES (38, 'Can change login log', 10, 'change_loginlog');
INSERT INTO `auth_permission` VALUES (39, 'Can delete login log', 10, 'delete_loginlog');
INSERT INTO `auth_permission` VALUES (40, 'Can view login log', 10, 'view_loginlog');
INSERT INTO `auth_permission` VALUES (41, 'Can add notice', 11, 'add_notice');
INSERT INTO `auth_permission` VALUES (42, 'Can change notice', 11, 'change_notice');
INSERT INTO `auth_permission` VALUES (43, 'Can delete notice', 11, 'delete_notice');
INSERT INTO `auth_permission` VALUES (44, 'Can view notice', 11, 'view_notice');
INSERT INTO `auth_permission` VALUES (45, 'Can add op log', 12, 'add_oplog');
INSERT INTO `auth_permission` VALUES (46, 'Can change op log', 12, 'change_oplog');
INSERT INTO `auth_permission` VALUES (47, 'Can delete op log', 12, 'delete_oplog');
INSERT INTO `auth_permission` VALUES (48, 'Can view op log', 12, 'view_oplog');
INSERT INTO `auth_permission` VALUES (49, 'Can add tag', 13, 'add_tag');
INSERT INTO `auth_permission` VALUES (50, 'Can change tag', 13, 'change_tag');
INSERT INTO `auth_permission` VALUES (51, 'Can delete tag', 13, 'delete_tag');
INSERT INTO `auth_permission` VALUES (52, 'Can view tag', 13, 'view_tag');
INSERT INTO `auth_permission` VALUES (53, 'Can add user', 14, 'add_user');
INSERT INTO `auth_permission` VALUES (54, 'Can change user', 14, 'change_user');
INSERT INTO `auth_permission` VALUES (55, 'Can delete user', 14, 'delete_user');
INSERT INTO `auth_permission` VALUES (56, 'Can view user', 14, 'view_user');
INSERT INTO `auth_permission` VALUES (57, 'Can add thing', 15, 'add_thing');
INSERT INTO `auth_permission` VALUES (58, 'Can change thing', 15, 'change_thing');
INSERT INTO `auth_permission` VALUES (59, 'Can delete thing', 15, 'delete_thing');
INSERT INTO `auth_permission` VALUES (60, 'Can view thing', 15, 'view_thing');
INSERT INTO `auth_permission` VALUES (61, 'Can add record', 16, 'add_record');
INSERT INTO `auth_permission` VALUES (62, 'Can change record', 16, 'change_record');
INSERT INTO `auth_permission` VALUES (63, 'Can delete record', 16, 'delete_record');
INSERT INTO `auth_permission` VALUES (64, 'Can view record', 16, 'view_record');
INSERT INTO `auth_permission` VALUES (65, 'Can add order log', 17, 'add_orderlog');
INSERT INTO `auth_permission` VALUES (66, 'Can change order log', 17, 'change_orderlog');
INSERT INTO `auth_permission` VALUES (67, 'Can delete order log', 17, 'delete_orderlog');
INSERT INTO `auth_permission` VALUES (68, 'Can view order log', 17, 'view_orderlog');
INSERT INTO `auth_permission` VALUES (69, 'Can add order', 18, 'add_order');
INSERT INTO `auth_permission` VALUES (70, 'Can change order', 18, 'change_order');
INSERT INTO `auth_permission` VALUES (71, 'Can delete order', 18, 'delete_order');
INSERT INTO `auth_permission` VALUES (72, 'Can view order', 18, 'view_order');
INSERT INTO `auth_permission` VALUES (73, 'Can add comment', 19, 'add_comment');
INSERT INTO `auth_permission` VALUES (74, 'Can change comment', 19, 'change_comment');
INSERT INTO `auth_permission` VALUES (75, 'Can delete comment', 19, 'delete_comment');
INSERT INTO `auth_permission` VALUES (76, 'Can view comment', 19, 'view_comment');
INSERT INTO `auth_permission` VALUES (77, 'Can add banner', 20, 'add_banner');
INSERT INTO `auth_permission` VALUES (78, 'Can change banner', 20, 'change_banner');
INSERT INTO `auth_permission` VALUES (79, 'Can delete banner', 20, 'delete_banner');
INSERT INTO `auth_permission` VALUES (80, 'Can view banner', 20, 'view_banner');
INSERT INTO `auth_permission` VALUES (81, 'Can add address', 21, 'add_address');
INSERT INTO `auth_permission` VALUES (82, 'Can change address', 21, 'change_address');
INSERT INTO `auth_permission` VALUES (83, 'Can delete address', 21, 'delete_address');
INSERT INTO `auth_permission` VALUES (84, 'Can view address', 21, 'view_address');
-- ----------------------------
-- Table structure for auth_user
-- ----------------------------
DROP TABLE IF EXISTS `auth_user`;
CREATE TABLE `auth_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`password` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`last_login` datetime(6) NULL DEFAULT NULL,
`is_superuser` tinyint(1) NOT NULL,
`username` varchar(150) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`first_name` varchar(150) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`last_name` varchar(150) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`email` varchar(254) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`is_staff` tinyint(1) NOT NULL,
`is_active` tinyint(1) NOT NULL,
`date_joined` datetime(6) NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `username`(`username`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of auth_user
-- ----------------------------
-- ----------------------------
-- Table structure for auth_user_groups
-- ----------------------------
DROP TABLE IF EXISTS `auth_user_groups`;
CREATE TABLE `auth_user_groups` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`group_id` int(11) NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `auth_user_groups_user_id_group_id_94350c0c_uniq`(`user_id`, `group_id`) USING BTREE,
INDEX `auth_user_groups_group_id_97559544_fk_auth_group_id`(`group_id`) USING BTREE,
CONSTRAINT `auth_user_groups_group_id_97559544_fk_auth_group_id` FOREIGN KEY (`group_id`) REFERENCES `auth_group` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `auth_user_groups_user_id_6a12ed8b_fk_auth_user_id` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of auth_user_groups
-- ----------------------------
-- ----------------------------
-- Table structure for auth_user_user_permissions
-- ----------------------------
DROP TABLE IF EXISTS `auth_user_user_permissions`;
CREATE TABLE `auth_user_user_permissions` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`permission_id` int(11) NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `auth_user_user_permissions_user_id_permission_id_14a6b632_uniq`(`user_id`, `permission_id`) USING BTREE,
INDEX `auth_user_user_permi_permission_id_1fbb5f2c_fk_auth_perm`(`permission_id`) USING BTREE,
CONSTRAINT `auth_user_user_permi_permission_id_1fbb5f2c_fk_auth_perm` FOREIGN KEY (`permission_id`) REFERENCES `auth_permission` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `auth_user_user_permissions_user_id_a95ead1b_fk_auth_user_id` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of auth_user_user_permissions
-- ----------------------------
-- ----------------------------
-- Table structure for b_ad
-- ----------------------------
DROP TABLE IF EXISTS `b_ad`;
CREATE TABLE `b_ad` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`image` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`link` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`create_time` datetime(6) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of b_ad
-- ----------------------------
INSERT INTO `b_ad` VALUES (1, '', 'http://www.baidu.com111', '2024-02-04 17:26:04.553627');
-- ----------------------------
-- Table structure for b_address
-- ----------------------------
DROP TABLE IF EXISTS `b_address`;
CREATE TABLE `b_address` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`mobile` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`desc` varchar(300) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`default` tinyint(1) NULL DEFAULT NULL,
`create_time` datetime(6) NULL DEFAULT NULL,
`user_id` bigint(20) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
INDEX `b_address_user_id_a37a8d6a_fk_b_user_id`(`user_id`) USING BTREE,
CONSTRAINT `b_address_user_id_a37a8d6a_fk_b_user_id` FOREIGN KEY (`user_id`) REFERENCES `b_user` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of b_address
-- ----------------------------
-- ----------------------------
-- Table structure for b_banner
-- ----------------------------
DROP TABLE IF EXISTS `b_banner`;
CREATE TABLE `b_banner` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`image` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`create_time` datetime(6) NULL DEFAULT NULL,
`thing_id` bigint(20) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
INDEX `b_banner_thing_id_3f307d00_fk_b_thing_id`(`thing_id`) USING BTREE,
CONSTRAINT `b_banner_thing_id_3f307d00_fk_b_thing_id` FOREIGN KEY (`thing_id`) REFERENCES `b_thing` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of b_banner
-- ----------------------------
-- ----------------------------
-- Table structure for b_classification
-- ----------------------------
DROP TABLE IF EXISTS `b_classification`;
CREATE TABLE `b_classification` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`title` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`create_time` datetime(6) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of b_classification
-- ----------------------------
INSERT INTO `b_classification` VALUES (1, '体育类', '2024-02-04 16:39:13.697593');
INSERT INTO `b_classification` VALUES (2, '运动类', '2024-02-04 16:39:19.397394');
INSERT INTO `b_classification` VALUES (3, '文艺类', '2024-02-04 16:39:24.633287');
INSERT INTO `b_classification` VALUES (4, '电子类', '2024-02-04 16:39:59.841608');
-- ----------------------------
-- Table structure for b_comment
-- ----------------------------
DROP TABLE IF EXISTS `b_comment`;
CREATE TABLE `b_comment` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`content` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`comment_time` datetime(6) NULL DEFAULT NULL,
`like_count` int(11) NOT NULL,
`thing_id` bigint(20) NULL DEFAULT NULL,
`user_id` bigint(20) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
INDEX `b_comment_thing_id_57ab492b_fk_b_thing_id`(`thing_id`) USING BTREE,
INDEX `b_comment_user_id_46f0670f_fk_b_user_id`(`user_id`) USING BTREE,
CONSTRAINT `b_comment_thing_id_57ab492b_fk_b_thing_id` FOREIGN KEY (`thing_id`) REFERENCES `b_thing` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `b_comment_user_id_46f0670f_fk_b_user_id` FOREIGN KEY (`user_id`) REFERENCES `b_user` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of b_comment
-- ----------------------------
INSERT INTO `b_comment` VALUES (1, 'dasdf', '2024-02-04 16:58:15.144159', 1, 5, 4);
INSERT INTO `b_comment` VALUES (2, 'dfasdfff', '2024-02-04 16:58:17.850901', 1, 5, 4);
INSERT INTO `b_comment` VALUES (3, '的地方211', '2024-02-04 17:00:55.346951', 2, 5, 4);
-- ----------------------------
-- Table structure for b_error_log
-- ----------------------------
DROP TABLE IF EXISTS `b_error_log`;
CREATE TABLE `b_error_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`ip` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`url` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`method` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`content` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`log_time` datetime(6) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of b_error_log
-- ----------------------------
-- ----------------------------
-- Table structure for b_login_log
-- ----------------------------
DROP TABLE IF EXISTS `b_login_log`;
CREATE TABLE `b_login_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`username` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`ip` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`ua` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`log_time` datetime(6) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of b_login_log
-- ----------------------------
INSERT INTO `b_login_log` VALUES (1, 'admin', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36', '2024-02-04 16:36:19.239685');
INSERT INTO `b_login_log` VALUES (2, 'aaa', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36', '2024-02-04 16:57:10.644691');
INSERT INTO `b_login_log` VALUES (3, 'admin123', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36', '2024-02-04 17:18:37.112379');
INSERT INTO `b_login_log` VALUES (4, 'admin', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36', '2024-02-04 17:25:59.480266');
INSERT INTO `b_login_log` VALUES (5, 'aaa', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36', '2024-02-04 17:27:08.481837');
-- ----------------------------
-- Table structure for b_notice
-- ----------------------------
DROP TABLE IF EXISTS `b_notice`;
CREATE TABLE `b_notice` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`title` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`content` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`create_time` datetime(6) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of b_notice
-- ----------------------------
INSERT INTO `b_notice` VALUES (1, 'abcd', '欢迎申请', '2024-02-04 17:26:10.000000');
INSERT INTO `b_notice` VALUES (2, '新建社团123', '安德森对方', '2024-02-04 17:26:20.948813');
-- ----------------------------
-- Table structure for b_op_log
-- ----------------------------
DROP TABLE IF EXISTS `b_op_log`;
CREATE TABLE `b_op_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`re_ip` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`re_time` datetime(6) NULL DEFAULT NULL,
`re_url` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`re_method` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`re_content` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`access_time` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 25 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of b_op_log
-- ----------------------------
INSERT INTO `b_op_log` VALUES (1, '127.0.0.1', '2024-02-04 17:25:16.003630', '/myapp/admin/loginLog/list', 'GET', NULL, '25');
INSERT INTO `b_op_log` VALUES (2, '127.0.0.1', '2024-02-04 17:25:16.125409', '/myapp/admin/opLog/list', 'GET', NULL, '28');
INSERT INTO `b_op_log` VALUES (3, '127.0.0.1', '2024-02-04 17:25:16.735706', '/myapp/admin/errorLog/list', 'GET', NULL, '4');
INSERT INTO `b_op_log` VALUES (4, '127.0.0.1', '2024-02-04 17:25:17.091962', '/myapp/admin/opLog/list', 'GET', NULL, '28');
INSERT INTO `b_op_log` VALUES (5, '127.0.0.1', '2024-02-04 17:25:17.996686', '/myapp/admin/comment/list', 'GET', NULL, '24');
INSERT INTO `b_op_log` VALUES (6, '127.0.0.1', '2024-02-04 17:25:18.508752', '/myapp/admin/tag/list', 'GET', NULL, '28');
INSERT INTO `b_op_log` VALUES (7, '127.0.0.1', '2024-02-04 17:25:18.995965', '/myapp/admin/order/list', 'GET', NULL, '25');
INSERT INTO `b_op_log` VALUES (8, '127.0.0.1', '2024-02-04 17:25:19.517164', '/myapp/admin/classification/list', 'GET', NULL, '25');
INSERT INTO `b_op_log` VALUES (9, '127.0.0.1', '2024-02-04 17:25:19.951784', '/myapp/admin/order/list', 'GET', NULL, '8');
INSERT INTO `b_op_log` VALUES (10, '127.0.0.1', '2024-02-04 17:25:20.517535', '/myapp/admin/tag/list', 'GET', NULL, '17');
INSERT INTO `b_op_log` VALUES (11, '127.0.0.1', '2024-02-04 17:25:20.899065', '/myapp/admin/comment/list', 'GET', NULL, '7');
INSERT INTO `b_op_log` VALUES (12, '127.0.0.1', '2024-02-04 17:25:21.391965', '/myapp/admin/user/list', 'GET', NULL, '20');
INSERT INTO `b_op_log` VALUES (13, '127.0.0.1', '2024-02-04 17:25:21.677749', '/myapp/admin/comment/list', 'GET', NULL, '5');
INSERT INTO `b_op_log` VALUES (14, '127.0.0.1', '2024-02-04 17:25:24.066175', '/myapp/index/comment/list', 'GET', NULL, '3');
INSERT INTO `b_op_log` VALUES (15, '127.0.0.1', '2024-02-04 17:25:24.083944', '/myapp/index/comment/list', 'GET', NULL, '22');
INSERT INTO `b_op_log` VALUES (16, '127.0.0.1', '2024-02-04 17:25:24.084992', '/myapp/index/comment/list', 'GET', NULL, '23');
INSERT INTO `b_op_log` VALUES (17, '127.0.0.1', '2024-02-04 17:25:24.090525', '/myapp/index/comment/list', 'GET', NULL, '29');
INSERT INTO `b_op_log` VALUES (18, '127.0.0.1', '2024-02-04 17:25:24.094806', '/upload/cover/1707036810262.jpeg', 'GET', NULL, '1');
INSERT INTO `b_op_log` VALUES (19, '127.0.0.1', '2024-02-04 17:25:24.109564', '/upload/cover/1707036756214.jpeg', 'GET', NULL, '1');
INSERT INTO `b_op_log` VALUES (20, '127.0.0.1', '2024-02-04 17:25:24.109564', '/upload/cover/1707036858212.jpeg', 'GET', NULL, '0');
INSERT INTO `b_op_log` VALUES (21, '127.0.0.1', '2024-02-04 17:25:24.109564', '/upload/cover/1707036756214.jpeg', 'GET', NULL, '0');
INSERT INTO `b_op_log` VALUES (22, '127.0.0.1', '2024-02-04 17:25:24.110577', '/upload/cover/1707036638009.jpeg', 'GET', NULL, '1');
INSERT INTO `b_op_log` VALUES (23, '127.0.0.1', '2024-02-04 17:25:24.110577', '/upload/cover/1707036701716.jpeg', 'GET', NULL, '0');
INSERT INTO `b_op_log` VALUES (24, '127.0.0.1', '2024-02-04 17:25:27.073752', '/myapp/admin/opLog/list', 'GET', NULL, '4');
-- ----------------------------
-- Table structure for b_order
-- ----------------------------
DROP TABLE IF EXISTS `b_order`;
CREATE TABLE `b_order` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`order_number` varchar(13) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`count` int(11) NOT NULL,
`status` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`order_time` datetime(6) NULL DEFAULT NULL,
`pay_time` datetime(6) NULL DEFAULT NULL,
`receiver_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`receiver_address` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`receiver_phone` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`remark` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`thing_id` bigint(20) NULL DEFAULT NULL,
`user_id` bigint(20) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
INDEX `b_order_thing_id_4e345e2c_fk_b_thing_id`(`thing_id`) USING BTREE,
INDEX `b_order_user_id_64854046_fk_b_user_id`(`user_id`) USING BTREE,
CONSTRAINT `b_order_thing_id_4e345e2c_fk_b_thing_id` FOREIGN KEY (`thing_id`) REFERENCES `b_thing` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `b_order_user_id_64854046_fk_b_user_id` FOREIGN KEY (`user_id`) REFERENCES `b_user` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of b_order
-- ----------------------------
INSERT INTO `b_order` VALUES (1, '1707037383809', 1, '2', '2024-02-04 17:03:03.811334', NULL, NULL, NULL, NULL, NULL, 5, 4);
INSERT INTO `b_order` VALUES (2, '1707037601900', 1, '2', '2024-02-04 17:06:41.903354', NULL, NULL, NULL, NULL, NULL, 5, 4);
INSERT INTO `b_order` VALUES (3, '1707038198529', 1, '7', '2024-02-04 17:16:38.534185', NULL, NULL, NULL, NULL, NULL, 1, 4);
-- ----------------------------
-- Table structure for b_order_log
-- ----------------------------
DROP TABLE IF EXISTS `b_order_log`;
CREATE TABLE `b_order_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`action` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`log_time` datetime(6) NULL DEFAULT NULL,
`thing_id` bigint(20) NULL DEFAULT NULL,
`user_id` bigint(20) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
INDEX `b_order_log_thing_id_7306f624_fk_b_thing_id`(`thing_id`) USING BTREE,
INDEX `b_order_log_user_id_1003e839_fk_b_user_id`(`user_id`) USING BTREE,
CONSTRAINT `b_order_log_thing_id_7306f624_fk_b_thing_id` FOREIGN KEY (`thing_id`) REFERENCES `b_thing` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `b_order_log_user_id_1003e839_fk_b_user_id` FOREIGN KEY (`user_id`) REFERENCES `b_user` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of b_order_log
-- ----------------------------
-- ----------------------------
-- Table structure for b_record
-- ----------------------------
DROP TABLE IF EXISTS `b_record`;
CREATE TABLE `b_record` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`title` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`record_time` datetime(6) NULL DEFAULT NULL,
`classification_id` bigint(20) NULL DEFAULT NULL,
`thing_id` bigint(20) NULL DEFAULT NULL,
`user_id` bigint(20) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
INDEX `b_record_classification_id_52591cc9_fk_b_classification_id`(`classification_id`) USING BTREE,
INDEX `b_record_thing_id_d8e773c0_fk_b_thing_id`(`thing_id`) USING BTREE,
INDEX `b_record_user_id_7e5958b0_fk_b_user_id`(`user_id`) USING BTREE,
CONSTRAINT `b_record_classification_id_52591cc9_fk_b_classification_id` FOREIGN KEY (`classification_id`) REFERENCES `b_classification` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `b_record_thing_id_d8e773c0_fk_b_thing_id` FOREIGN KEY (`thing_id`) REFERENCES `b_thing` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `b_record_user_id_7e5958b0_fk_b_user_id` FOREIGN KEY (`user_id`) REFERENCES `b_user` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of b_record
-- ----------------------------
-- ----------------------------
-- Table structure for b_tag
-- ----------------------------
DROP TABLE IF EXISTS `b_tag`;
CREATE TABLE `b_tag` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`title` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`create_time` datetime(6) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of b_tag
-- ----------------------------
INSERT INTO `b_tag` VALUES (1, '美女多', '2024-02-04 16:38:34.240261');
INSERT INTO `b_tag` VALUES (2, '高材生', '2024-02-04 16:38:41.618448');
INSERT INTO `b_tag` VALUES (3, '帅哥多', '2024-02-04 16:38:48.542216');
INSERT INTO `b_tag` VALUES (4, '读书', '2024-02-04 16:38:57.500728');
INSERT INTO `b_tag` VALUES (5, '跑步', '2024-02-04 16:39:05.464820');
-- ----------------------------
-- Table structure for b_thing
-- ----------------------------
DROP TABLE IF EXISTS `b_thing`;
CREATE TABLE `b_thing` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`title` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`cover` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`description` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
`mobile` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`location` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`status` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`create_time` datetime(6) NULL DEFAULT NULL,
`pv` int(11) NOT NULL,
`recommend_count` int(11) NOT NULL,
`wish_count` int(11) NOT NULL,
`collect_count` int(11) NOT NULL,
`classification_id` bigint(20) NULL DEFAULT NULL,
`user_id` bigint(20) NULL DEFAULT NULL,
`email` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`zongzhi` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
INDEX `b_thing_classification_id_47675ac4_fk_b_classification_id`(`classification_id`) USING BTREE,
INDEX `b_thing_user_id_9918a633_fk_b_user_id`(`user_id`) USING BTREE,
CONSTRAINT `b_thing_classification_id_47675ac4_fk_b_classification_id` FOREIGN KEY (`classification_id`) REFERENCES `b_classification` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `b_thing_user_id_9918a633_fk_b_user_id` FOREIGN KEY (`user_id`) REFERENCES `b_user` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of b_thing
-- ----------------------------
INSERT INTO `b_thing` VALUES (1, '街舞团', 'cover/1707036603261.jpeg', 'abcfdasdf', '13422221111', '教学楼3号楼1层', '0', '2024-02-04 16:45:44.682923', 4, 0, 1, 1, 2, NULL, '123@qq.com', '为人民服务');
INSERT INTO `b_thing` VALUES (2, 'beyond502乐队', 'cover/1707036638009.jpeg', '江河湖海就将计就计哈哈哈哈哈哈哈哈', '13455555555', '6号宿舍楼', '0', '2024-02-04 16:51:15.254882', 1, 0, 0, 0, 3, NULL, '12345@qq.com', '为了音乐而生');
INSERT INTO `b_thing` VALUES (3, '轮滑俱乐部', 'cover/1707036701716.jpeg', '哈哈哈哈哈哈哈哈哈哈', '13422221111', '9号宿舍楼', '0', '2024-02-04 16:52:13.713017', 0, 0, 0, 0, 2, NULL, '1234@126.com', '为了运动努力');
INSERT INTO `b_thing` VALUES (4, '王羲之书法俱乐部', 'cover/1707036756214.jpeg', '江河湖海哼哼唧唧哼哼唧唧就哈哈哈哈话剧', '13211112222', '颐和园路5号', '0', '2024-02-04 16:53:09.100387', 2, 0, 0, 0, 3, NULL, '123@qq.com', '为了哈哈哈');
INSERT INTO `b_thing` VALUES (5, '电子琴俱乐部', 'cover/1707036810262.jpeg', '就很好很好灌灌哈哈哈哈嘎嘎嘎嘎', '13455555555', '12号教学楼', '0', '2024-02-04 16:53:56.425555', 16, 0, 1, 1, 4, NULL, '12245@qq.com', '为了生活');
INSERT INTO `b_thing` VALUES (6, '夜跑俱乐部', 'cover/1707036858212.jpeg', '就啊哈哈的观点嘎哈韩国', '13222221111', '9号教学楼', '0', '2024-02-04 16:54:43.049737', 3, 0, 0, 0, 1, NULL, '999888@qq.com', '为了跑步');
-- ----------------------------
-- Table structure for b_thing_collect
-- ----------------------------
DROP TABLE IF EXISTS `b_thing_collect`;
CREATE TABLE `b_thing_collect` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`thing_id` bigint(20) NOT NULL,
`user_id` bigint(20) NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `b_thing_collect_thing_id_user_id_45b9f252_uniq`(`thing_id`, `user_id`) USING BTREE,
INDEX `b_thing_collect_user_id_e5d69968_fk_b_user_id`(`user_id`) USING BTREE,
CONSTRAINT `b_thing_collect_thing_id_8edce8b3_fk_b_thing_id` FOREIGN KEY (`thing_id`) REFERENCES `b_thing` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `b_thing_collect_user_id_e5d69968_fk_b_user_id` FOREIGN KEY (`user_id`) REFERENCES `b_user` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of b_thing_collect
-- ----------------------------
INSERT INTO `b_thing_collect` VALUES (2, 1, 4);
INSERT INTO `b_thing_collect` VALUES (1, 5, 4);
-- ----------------------------
-- Table structure for b_thing_tag
-- ----------------------------
DROP TABLE IF EXISTS `b_thing_tag`;
CREATE TABLE `b_thing_tag` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`thing_id` bigint(20) NOT NULL,
`tag_id` bigint(20) NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `b_thing_tag_thing_id_tag_id_a5d426b2_uniq`(`thing_id`, `tag_id`) USING BTREE,
INDEX `b_thing_tag_tag_id_d02b28a1_fk_b_tag_id`(`tag_id`) USING BTREE,
CONSTRAINT `b_thing_tag_tag_id_d02b28a1_fk_b_tag_id` FOREIGN KEY (`tag_id`) REFERENCES `b_tag` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `b_thing_tag_thing_id_fb8ecf3f_fk_b_thing_id` FOREIGN KEY (`thing_id`) REFERENCES `b_thing` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 22 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of b_thing_tag
-- ----------------------------
INSERT INTO `b_thing_tag` VALUES (1, 1, 2);
INSERT INTO `b_thing_tag` VALUES (2, 1, 3);
INSERT INTO `b_thing_tag` VALUES (3, 1, 4);
INSERT INTO `b_thing_tag` VALUES (4, 1, 5);
INSERT INTO `b_thing_tag` VALUES (5, 2, 1);
INSERT INTO `b_thing_tag` VALUES (6, 2, 2);
INSERT INTO `b_thing_tag` VALUES (7, 2, 3);
INSERT INTO `b_thing_tag` VALUES (8, 2, 5);
INSERT INTO `b_thing_tag` VALUES (9, 3, 1);
INSERT INTO `b_thing_tag` VALUES (10, 3, 2);
INSERT INTO `b_thing_tag` VALUES (11, 3, 3);
INSERT INTO `b_thing_tag` VALUES (12, 3, 4);
INSERT INTO `b_thing_tag` VALUES (13, 3, 5);
INSERT INTO `b_thing_tag` VALUES (14, 4, 2);
INSERT INTO `b_thing_tag` VALUES (15, 4, 4);
INSERT INTO `b_thing_tag` VALUES (16, 4, 5);
INSERT INTO `b_thing_tag` VALUES (17, 5, 2);
INSERT INTO `b_thing_tag` VALUES (18, 5, 4);
INSERT INTO `b_thing_tag` VALUES (19, 6, 1);
INSERT INTO `b_thing_tag` VALUES (20, 6, 2);
INSERT INTO `b_thing_tag` VALUES (21, 6, 5);
-- ----------------------------
-- Table structure for b_thing_wish
-- ----------------------------
DROP TABLE IF EXISTS `b_thing_wish`;
CREATE TABLE `b_thing_wish` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`thing_id` bigint(20) NOT NULL,
`user_id` bigint(20) NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `b_thing_wish_thing_id_user_id_9d647bbb_uniq`(`thing_id`, `user_id`) USING BTREE,
INDEX `b_thing_wish_user_id_e2d94f6c_fk_b_user_id`(`user_id`) USING BTREE,
CONSTRAINT `b_thing_wish_thing_id_f0864b16_fk_b_thing_id` FOREIGN KEY (`thing_id`) REFERENCES `b_thing` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `b_thing_wish_user_id_e2d94f6c_fk_b_user_id` FOREIGN KEY (`user_id`) REFERENCES `b_user` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of b_thing_wish
-- ----------------------------
INSERT INTO `b_thing_wish` VALUES (2, 1, 4);
INSERT INTO `b_thing_wish` VALUES (1, 5, 4);
-- ----------------------------
-- Table structure for b_user
-- ----------------------------
DROP TABLE IF EXISTS `b_user`;
CREATE TABLE `b_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`username` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`password` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`role` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`status` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`nickname` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`avatar` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`mobile` varchar(13) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`email` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`gender` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`description` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
`create_time` datetime(6) NULL DEFAULT NULL,
`score` int(11) NULL DEFAULT NULL,
`push_email` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`push_switch` tinyint(1) NULL DEFAULT NULL,
`admin_token` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`token` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of b_user
-- ----------------------------
INSERT INTO `b_user` VALUES (1, 'admin', '78aafd3207ec4ef6d16f9fc07e95ebc3', '1', '0', NULL, '', NULL, NULL, NULL, NULL, '2024-02-04 16:36:13.029265', 0, NULL, 0, '21232f297a57a5a743894a0e4a801fc3', NULL);
INSERT INTO `b_user` VALUES (2, 'admin123', '0192023a7bbd73250516f069df18b500', '1', '0', NULL, '', NULL, NULL, NULL, NULL, '2024-02-04 16:40:18.754982', 0, NULL, 0, '0192023a7bbd73250516f069df18b500', NULL);
INSERT INTO `b_user` VALUES (3, 'test', '098f6bcd4621d373cade4e832627b4f6', '3', '0', NULL, '', NULL, NULL, NULL, NULL, '2024-02-04 16:40:35.603385', 0, NULL, 0, NULL, NULL);
INSERT INTO `b_user` VALUES (4, 'aaa', '47bce5c74f589f4867dbd57e9ca9f808', '2', '0', '1233', '', NULL, NULL, NULL, NULL, '2024-02-04 16:57:07.608626', 0, NULL, 0, NULL, '47bce5c74f589f4867dbd57e9ca9f808');
-- ----------------------------
-- Table structure for django_admin_log
-- ----------------------------
DROP TABLE IF EXISTS `django_admin_log`;
CREATE TABLE `django_admin_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`action_time` datetime(6) NOT NULL,
`object_id` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
`object_repr` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`action_flag` smallint(5) UNSIGNED NOT NULL,
`change_message` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`content_type_id` int(11) NULL DEFAULT NULL,
`user_id` int(11) NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
INDEX `django_admin_log_content_type_id_c4bce8eb_fk_django_co`(`content_type_id`) USING BTREE,
INDEX `django_admin_log_user_id_c564eba6_fk_auth_user_id`(`user_id`) USING BTREE,
CONSTRAINT `django_admin_log_content_type_id_c4bce8eb_fk_django_co` FOREIGN KEY (`content_type_id`) REFERENCES `django_content_type` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `django_admin_log_user_id_c564eba6_fk_auth_user_id` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of django_admin_log
-- ----------------------------
-- ----------------------------
-- Table structure for django_content_type
-- ----------------------------
DROP TABLE IF EXISTS `django_content_type`;
CREATE TABLE `django_content_type` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`app_label` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`model` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `django_content_type_app_label_model_76bd3d3b_uniq`(`app_label`, `model`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 22 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of django_content_type
-- ----------------------------
INSERT INTO `django_content_type` VALUES (1, 'admin', 'logentry');
INSERT INTO `django_content_type` VALUES (3, 'auth', 'group');
INSERT INTO `django_content_type` VALUES (2, 'auth', 'permission');
INSERT INTO `django_content_type` VALUES (4, 'auth', 'user');
INSERT INTO `django_content_type` VALUES (5, 'contenttypes', 'contenttype');
INSERT INTO `django_content_type` VALUES (7, 'myapp', 'ad');
INSERT INTO `django_content_type` VALUES (21, 'myapp', 'address');
INSERT INTO `django_content_type` VALUES (20, 'myapp', 'banner');
INSERT INTO `django_content_type` VALUES (8, 'myapp', 'classification');
INSERT INTO `django_content_type` VALUES (19, 'myapp', 'comment');
INSERT INTO `django_content_type` VALUES (9, 'myapp', 'errorlog');
INSERT INTO `django_content_type` VALUES (10, 'myapp', 'loginlog');
INSERT INTO `django_content_type` VALUES (11, 'myapp', 'notice');
INSERT INTO `django_content_type` VALUES (12, 'myapp', 'oplog');
INSERT INTO `django_content_type` VALUES (18, 'myapp', 'order');
INSERT INTO `django_content_type` VALUES (17, 'myapp', 'orderlog');
INSERT INTO `django_content_type` VALUES (16, 'myapp', 'record');
INSERT INTO `django_content_type` VALUES (13, 'myapp', 'tag');
INSERT INTO `django_content_type` VALUES (15, 'myapp', 'thing');
INSERT INTO `django_content_type` VALUES (14, 'myapp', 'user');
INSERT INTO `django_content_type` VALUES (6, 'sessions', 'session');
-- ----------------------------
-- Table structure for django_migrations
-- ----------------------------
DROP TABLE IF EXISTS `django_migrations`;
CREATE TABLE `django_migrations` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`app` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`applied` datetime(6) NOT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 22 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of django_migrations
-- ----------------------------
INSERT INTO `django_migrations` VALUES (1, 'contenttypes', '0001_initial', '2024-02-04 16:32:51.298695');
INSERT INTO `django_migrations` VALUES (2, 'auth', '0001_initial', '2024-02-04 16:32:51.549701');
INSERT INTO `django_migrations` VALUES (3, 'admin', '0001_initial', '2024-02-04 16:32:51.606242');
INSERT INTO `django_migrations` VALUES (4, 'admin', '0002_logentry_remove_auto_add', '2024-02-04 16:32:51.613953');
INSERT INTO `django_migrations` VALUES (5, 'admin', '0003_logentry_add_action_flag_choices', '2024-02-04 16:32:51.619196');
INSERT INTO `django_migrations` VALUES (6, 'contenttypes', '0002_remove_content_type_name', '2024-02-04 16:32:51.687139');
INSERT INTO `django_migrations` VALUES (7, 'auth', '0002_alter_permission_name_max_length', '2024-02-04 16:32:51.729044');
INSERT INTO `django_migrations` VALUES (8, 'auth', '0003_alter_user_email_max_length', '2024-02-04 16:32:51.771331');
INSERT INTO `django_migrations` VALUES (9, 'auth', '0004_alter_user_username_opts', '2024-02-04 16:32:51.777711');
INSERT INTO `django_migrations` VALUES (10, 'auth', '0005_alter_user_last_login_null', '2024-02-04 16:32:51.813729');
INSERT INTO `django_migrations` VALUES (11, 'auth', '0006_require_contenttypes_0002', '2024-02-04 16:32:51.817877');
INSERT INTO `django_migrations` VALUES (12, 'auth', '0007_alter_validators_add_error_messages', '2024-02-04 16:32:51.823354');
INSERT INTO `django_migrations` VALUES (13, 'auth', '0008_alter_user_username_max_length', '2024-02-04 16:32:51.865155');
INSERT INTO `django_migrations` VALUES (14, 'auth', '0009_alter_user_last_name_max_length', '2024-02-04 16:32:51.907643');
INSERT INTO `django_migrations` VALUES (15, 'auth', '0010_alter_group_name_max_length', '2024-02-04 16:32:51.951019');
INSERT INTO `django_migrations` VALUES (16, 'auth', '0011_update_proxy_permissions', '2024-02-04 16:32:51.958587');
INSERT INTO `django_migrations` VALUES (17, 'auth', '0012_alter_user_first_name_max_length', '2024-02-04 16:32:52.003585');
INSERT INTO `django_migrations` VALUES (18, 'myapp', '0001_initial', '2024-02-04 16:32:52.698876');
INSERT INTO `django_migrations` VALUES (19, 'myapp', '0002_thing_user', '2024-02-04 16:32:52.738582');
INSERT INTO `django_migrations` VALUES (20, 'myapp', '0003_auto_20240204_1632', '2024-02-04 16:32:52.933013');
INSERT INTO `django_migrations` VALUES (21, 'sessions', '0001_initial', '2024-02-04 16:32:52.969896');
-- ----------------------------
-- Table structure for django_session
-- ----------------------------
DROP TABLE IF EXISTS `django_session`;
CREATE TABLE `django_session` (
`session_key` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`session_data` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`expire_date` datetime(6) NOT NULL,
PRIMARY KEY (`session_key`) USING BTREE,
INDEX `django_session_expire_date_a5c62663`(`expire_date`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of django_session
-- ----------------------------
SET FOREIGN_KEY_CHECKS = 1;

@ -0,0 +1,22 @@
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'server.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)
if __name__ == '__main__':
main()

@ -0,0 +1,10 @@
from django.contrib import admin
# Register your models here.
from myapp.models import Classification, Thing, Tag, User, Comment
admin.site.register(Classification)
admin.site.register(Tag)
admin.site.register(Thing)
admin.site.register(User)
admin.site.register(Comment)

@ -0,0 +1,6 @@
from django.apps import AppConfig
class MyappConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'myapp'

@ -0,0 +1,5 @@
from rest_framework.throttling import AnonRateThrottle
class MyRateThrottle(AnonRateThrottle):
THROTTLE_RATES = {"anon": "2/min"}

@ -0,0 +1,46 @@
from rest_framework import exceptions
from rest_framework.authentication import BaseAuthentication
from myapp.models import User
# 后台接口认证
class AdminTokenAuthtication(BaseAuthentication):
def authenticate(self, request):
adminToken = request.META.get("HTTP_ADMINTOKEN")
print("检查adminToken==>" + adminToken)
users = User.objects.filter(admin_token=adminToken)
"""
判定条件
1. 传了adminToken
2. 查到了该帐号
3. 该帐号是管理员或演示帐号
"""
if not adminToken or len(users) == 0 or users[0].role == '2':
raise exceptions.AuthenticationFailed("AUTH_FAIL_END")
else:
print('adminToken验证通过')
# 前台接口认证
class TokenAuthtication(BaseAuthentication):
def authenticate(self, request):
token = request.META.get("HTTP_TOKEN", "")
if token is not None:
print("检查token==>" + token)
users = User.objects.filter(token=token)
# print(users)
"""
判定条件
1. 传了token
2. 查到了该帐号
3. 该帐号是普通用户
"""
if not token or len(users) == 0 or (users[0].role in ['1', '3']):
raise exceptions.AuthenticationFailed("AUTH_FAIL_FRONT")
else:
print('token验证通过')
else:
print("检查token==>token 为空")
raise exceptions.AuthenticationFailed("AUTH_FAIL_FRONT")

@ -0,0 +1,13 @@
from rest_framework.response import Response
class APIResponse(Response):
def __init__(self, code=0, msg='', data=None, status=200, headers=None, content_type=None, **kwargs):
dic = {'code': code, 'msg': msg}
if data is not None:
dic['data'] = data
dic.update(kwargs) # 这里使用update
super().__init__(data=dic, status=status,
template_name=None, headers=headers,
exception=False, content_type=content_type)

@ -0,0 +1,54 @@
# -*- coding:utf-8 -*-
import time
import json
from django.utils.deprecation import MiddlewareMixin
from myapp import utils
from myapp.serializers import OpLogSerializer
class OpLogs(MiddlewareMixin):
def __init__(self, *args):
super(OpLogs, self).__init__(*args)
self.start_time = None # 开始时间
self.end_time = None # 响应时间
self.data = {} # dict数据
def process_request(self, request):
self.start_time = time.time() # 开始时间
re_ip = utils.get_ip(request)
re_method = request.method
re_content = request.GET if re_method == 'GET' else request.POST
if re_content:
re_content = json.dumps(re_content)
else:
re_content = None
self.data.update(
{
're_url': request.path,
're_method': re_method,
're_ip': re_ip,
# 're_content': re_content,
}
)
# print(self.data)
def process_response(self, request, response):
# 耗时毫秒/ms
self.end_time = time.time() # 响应时间
access_time = self.end_time - self.start_time
self.data['access_time'] = round(access_time * 1000)
# 入库
# serializer = OpLogSerializer(data=self.data)
# if serializer.is_valid():
# serializer.save()
return response

@ -0,0 +1,221 @@
from django.db import models
class User(models.Model):
GENDER_CHOICES = (
('M', ''),
('F', ''),
)
ROLE_CHOICES = (
('0', '管理员'),
('1', '普通用户'),
)
STATUS_CHOICES = (
('0', '正常'),
('1', '封号'),
)
id = models.BigAutoField(primary_key=True)
username = models.CharField(max_length=50, null=True)
password = models.CharField(max_length=50, null=True)
role = models.CharField(max_length=2, blank=True, null=True)
status = models.CharField(max_length=1, choices=STATUS_CHOICES, default='0')
nickname = models.CharField(blank=True, null=True, max_length=20)
avatar = models.FileField(upload_to='avatar/', null=True)
mobile = models.CharField(max_length=13, blank=True, null=True)
email = models.CharField(max_length=50, blank=True, null=True)
gender = models.CharField(max_length=1, choices=GENDER_CHOICES, blank=True, null=True)
description = models.TextField(max_length=200, null=True)
create_time = models.DateTimeField(auto_now_add=True, null=True)
score = models.IntegerField(default=0, blank=True, null=True)
push_email = models.CharField(max_length=40, blank=True, null=True)
push_switch = models.BooleanField(blank=True, null=True, default=False)
admin_token = models.CharField(max_length=32, blank=True, null=True)
token = models.CharField(max_length=32, blank=True, null=True)
class Meta:
db_table = "b_user"
class Tag(models.Model):
id = models.BigAutoField(primary_key=True)
title = models.CharField(max_length=100, blank=True, null=True)
create_time = models.DateTimeField(auto_now_add=True, null=True)
class Meta:
db_table = "b_tag"
class Classification(models.Model):
list_display = ("title", "id")
id = models.BigAutoField(primary_key=True)
title = models.CharField(max_length=100, blank=True, null=True)
create_time = models.DateTimeField(auto_now_add=True, null=True)
def __str__(self):
return self.title
class Meta:
db_table = "b_classification"
class Thing(models.Model):
STATUS_CHOICES = (
('0', '上架'),
('1', '下架'),
)
id = models.BigAutoField(primary_key=True)
classification = models.ForeignKey(Classification, on_delete=models.CASCADE, blank=True, null=True,
related_name='classification_thing')
user = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True, related_name='user_thing')
tag = models.ManyToManyField(Tag, blank=True)
title = models.CharField(max_length=100, blank=True, null=True)
cover = models.ImageField(upload_to='cover/', null=True)
description = models.TextField(max_length=1000, blank=True, null=True)
zongzhi = models.CharField(max_length=200, blank=True, null=True)
email = models.CharField(max_length=200, blank=True, null=True)
mobile = models.CharField(max_length=50, blank=True, null=True)
location = models.CharField(max_length=50, blank=True, null=True)
status = models.CharField(max_length=1, choices=STATUS_CHOICES, default='0')
create_time = models.DateTimeField(auto_now_add=True, null=True)
pv = models.IntegerField(default=0)
recommend_count = models.IntegerField(default=0)
wish = models.ManyToManyField(User, blank=True, related_name="wish_things")
wish_count = models.IntegerField(default=0)
collect = models.ManyToManyField(User, blank=True, related_name="collect_things")
collect_count = models.IntegerField(default=0)
class Meta:
db_table = "b_thing"
class Comment(models.Model):
id = models.BigAutoField(primary_key=True)
content = models.CharField(max_length=200, blank=True, null=True)
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, related_name='user_comment')
thing = models.ForeignKey(Thing, on_delete=models.CASCADE, null=True, related_name='thing_comment')
comment_time = models.DateTimeField(auto_now_add=True, null=True)
like_count = models.IntegerField(default=0)
class Meta:
db_table = "b_comment"
class Record(models.Model):
id = models.BigAutoField(primary_key=True)
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, related_name='user_record')
thing = models.ForeignKey(Thing, on_delete=models.CASCADE, null=True, related_name='thing_record')
title = models.CharField(max_length=100, blank=True, null=True)
classification = models.ForeignKey(Classification, on_delete=models.CASCADE, null=True,
related_name='classification')
record_time = models.DateTimeField(auto_now_add=True, null=True)
class Meta:
db_table = "b_record"
class LoginLog(models.Model):
id = models.BigAutoField(primary_key=True)
username = models.CharField(max_length=50, blank=True, null=True)
ip = models.CharField(max_length=100, blank=True, null=True)
ua = models.CharField(max_length=200, blank=True, null=True)
log_time = models.DateTimeField(auto_now_add=True, null=True)
class Meta:
db_table = "b_login_log"
class OpLog(models.Model):
id = models.BigAutoField(primary_key=True)
re_ip = models.CharField(max_length=100, blank=True, null=True)
re_time = models.DateTimeField(auto_now_add=True, null=True)
re_url = models.CharField(max_length=200, blank=True, null=True)
re_method = models.CharField(max_length=10, blank=True, null=True)
re_content = models.CharField(max_length=200, blank=True, null=True)
access_time = models.CharField(max_length=10, blank=True, null=True)
class Meta:
db_table = "b_op_log"
class ErrorLog(models.Model):
id = models.BigAutoField(primary_key=True)
ip = models.CharField(max_length=100, blank=True, null=True)
url = models.CharField(max_length=200, blank=True, null=True)
method = models.CharField(max_length=10, blank=True, null=True)
content = models.CharField(max_length=200, blank=True, null=True)
log_time = models.DateTimeField(auto_now_add=True, null=True)
class Meta:
db_table = "b_error_log"
class Order(models.Model):
id = models.BigAutoField(primary_key=True)
order_number = models.CharField(max_length=13, blank=True, null=True)
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, related_name='user_order')
thing = models.ForeignKey(Thing, on_delete=models.CASCADE, null=True, related_name='thing_order')
count = models.IntegerField(default=0)
status = models.CharField(max_length=2, blank=True, null=True) # 1未审核 2已审核 7取消
order_time = models.DateTimeField(auto_now_add=True, null=True)
pay_time = models.DateTimeField(null=True)
receiver_name = models.CharField(max_length=20, blank=True, null=True)
receiver_address = models.CharField(max_length=50, blank=True, null=True)
receiver_phone = models.CharField(max_length=20, blank=True, null=True)
remark = models.CharField(max_length=30, blank=True, null=True)
class Meta:
db_table = "b_order"
class OrderLog(models.Model):
id = models.BigAutoField(primary_key=True)
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, related_name='user_order_log')
thing = models.ForeignKey(Thing, on_delete=models.CASCADE, null=True, related_name='thing_order_log')
action = models.CharField(max_length=2, blank=True, null=True)
log_time = models.DateTimeField(auto_now_add=True, null=True)
class Meta:
db_table = "b_order_log"
class Banner(models.Model):
id = models.BigAutoField(primary_key=True)
image = models.ImageField(upload_to='banner/', null=True)
thing = models.ForeignKey(Thing, on_delete=models.CASCADE, null=True, related_name='thing_banner')
create_time = models.DateTimeField(auto_now_add=True, null=True)
class Meta:
db_table = "b_banner"
class Ad(models.Model):
id = models.BigAutoField(primary_key=True)
image = models.ImageField(upload_to='ad/', null=True)
link = models.CharField(max_length=500, blank=True, null=True)
create_time = models.DateTimeField(auto_now_add=True, null=True)
class Meta:
db_table = "b_ad"
class Notice(models.Model):
id = models.BigAutoField(primary_key=True)
title = models.CharField(max_length=100, blank=True, null=True)
content = models.CharField(max_length=1000, blank=True, null=True)
create_time = models.DateTimeField(auto_now_add=True, null=True)
class Meta:
db_table = "b_notice"
class Address(models.Model):
id = models.BigAutoField(primary_key=True)
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, related_name='user_address')
name = models.CharField(max_length=100, blank=True, null=True)
mobile = models.CharField(max_length=30, blank=True, null=True)
desc = models.CharField(max_length=300, blank=True, null=True)
default = models.BooleanField(blank=True, null=True, default=False) # 是否默认地址
create_time = models.DateTimeField(auto_now_add=True, null=True)
class Meta:
db_table = "b_address"

@ -0,0 +1,12 @@
from myapp.models import User
def isDemoAdminUser(request):
adminToken = request.META.get("HTTP_ADMINTOKEN")
users = User.objects.filter(admin_token=adminToken)
if len(users) > 0:
user = users[0]
if user.role == '3': # 角色3表示演示帐号
print('演示帐号===>')
return True
return False

@ -0,0 +1,160 @@
from rest_framework import serializers
from myapp.models import Thing, Classification, Tag, User, Comment, Record, LoginLog, Order, OrderLog, OpLog, Banner, \
Ad, Notice, ErrorLog, Address
class ThingSerializer(serializers.ModelSerializer):
# 额外字段
classification_title = serializers.ReadOnlyField(source='classification.title')
class Meta:
model = Thing
fields = '__all__'
class DetailThingSerializer(serializers.ModelSerializer):
# 额外字段
classification_title = serializers.ReadOnlyField(source='classification.title')
class Meta:
model = Thing
# 排除多对多字段
exclude = ('wish', 'collect',)
class UpdateThingSerializer(serializers.ModelSerializer):
# 额外字段
classification_title = serializers.ReadOnlyField(source='classification.title')
class Meta:
model = Thing
# 排除多对多字段
exclude = ('wish', 'collect',)
class ListThingSerializer(serializers.ModelSerializer):
# 额外字段
classification_title = serializers.ReadOnlyField(source='classification.title')
class Meta:
model = Thing
# 排除字段
exclude = ('wish', 'collect',)
class ClassificationSerializer(serializers.ModelSerializer):
class Meta:
model = Classification
fields = '__all__'
class TagSerializer(serializers.ModelSerializer):
class Meta:
model = Tag
fields = '__all__'
class UserSerializer(serializers.ModelSerializer):
create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', required=False)
class Meta:
model = User
fields = '__all__'
# exclude = ('password',)
class CommentSerializer(serializers.ModelSerializer):
comment_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', required=False)
# 额外字段
title = serializers.ReadOnlyField(source='thing.title')
username = serializers.ReadOnlyField(source='user.username')
class Meta:
model = Comment
fields = ['id', 'content', 'comment_time', 'like_count', 'thing', 'user', 'title', 'username']
class RecordSerializer(serializers.ModelSerializer):
class Meta:
model = Record
fields = '__all__'
class LoginLogSerializer(serializers.ModelSerializer):
log_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', required=False)
class Meta:
model = LoginLog
fields = '__all__'
class OpLogSerializer(serializers.ModelSerializer):
re_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', required=False)
class Meta:
model = OpLog
fields = '__all__'
class ErrorLogSerializer(serializers.ModelSerializer):
log_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', required=False)
class Meta:
model = ErrorLog
fields = '__all__'
class OrderSerializer(serializers.ModelSerializer):
order_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', required=False)
expect_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', required=False)
return_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', required=False)
# extra
username = serializers.ReadOnlyField(source='user.username')
title = serializers.ReadOnlyField(source='thing.title')
price = serializers.ReadOnlyField(source='thing.price')
cover = serializers.FileField(source='thing.cover', required=False)
class Meta:
model = Order
fields = '__all__'
class OrderLogSerializer(serializers.ModelSerializer):
class Meta:
model = OrderLog
fields = '__all__'
class BannerSerializer(serializers.ModelSerializer):
create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', required=False)
# extra
title = serializers.ReadOnlyField(source='thing.title')
class Meta:
model = Banner
fields = '__all__'
class AdSerializer(serializers.ModelSerializer):
create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', required=False)
class Meta:
model = Ad
fields = '__all__'
class NoticeSerializer(serializers.ModelSerializer):
create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', required=False)
class Meta:
model = Notice
fields = '__all__'
class AddressSerializer(serializers.ModelSerializer):
create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', required=False)
class Meta:
model = Address
fields = '__all__'

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

@ -0,0 +1,102 @@
from django.urls import path
from myapp import views
app_name = 'myapp'
urlpatterns = [
# 后台管理api
path('admin/overview/count', views.admin.overview.count),
path('admin/overview/sysInfo', views.admin.overview.sysInfo),
path('admin/thing/list', views.admin.thing.list_api),
path('admin/thing/detail', views.admin.thing.detail),
path('admin/thing/create', views.admin.thing.create),
path('admin/thing/update', views.admin.thing.update),
path('admin/thing/delete', views.admin.thing.delete),
path('admin/comment/list', views.admin.comment.list_api),
path('admin/comment/create', views.admin.comment.create),
path('admin/comment/update', views.admin.comment.update),
path('admin/comment/delete', views.admin.comment.delete),
path('admin/classification/list', views.admin.classification.list_api),
path('admin/classification/create', views.admin.classification.create),
path('admin/classification/update', views.admin.classification.update),
path('admin/classification/delete', views.admin.classification.delete),
path('admin/tag/list', views.admin.tag.list_api),
path('admin/tag/create', views.admin.tag.create),
path('admin/tag/update', views.admin.tag.update),
path('admin/tag/delete', views.admin.tag.delete),
path('admin/record/list', views.admin.record.list_api),
path('admin/record/create', views.admin.record.create),
path('admin/record/update', views.admin.record.update),
path('admin/record/delete', views.admin.record.delete),
path('admin/banner/list', views.admin.banner.list_api),
path('admin/banner/create', views.admin.banner.create),
path('admin/banner/update', views.admin.banner.update),
path('admin/banner/delete', views.admin.banner.delete),
path('admin/ad/list', views.admin.ad.list_api),
path('admin/ad/create', views.admin.ad.create),
path('admin/ad/update', views.admin.ad.update),
path('admin/ad/delete', views.admin.ad.delete),
path('admin/notice/list', views.admin.notice.list_api),
path('admin/notice/create', views.admin.notice.create),
path('admin/notice/update', views.admin.notice.update),
path('admin/notice/delete', views.admin.notice.delete),
path('admin/order/list', views.admin.order.list_api),
path('admin/order/create', views.admin.order.create),
path('admin/order/update', views.admin.order.update),
path('admin/order/cancel_order', views.admin.order.cancel_order),
path('admin/order/pass_order', views.admin.order.pass_order),
path('admin/order/delay', views.admin.order.delay),
path('admin/order/delete', views.admin.order.delete),
path('admin/loginLog/list', views.admin.loginLog.list_api),
path('admin/loginLog/create', views.admin.loginLog.create),
path('admin/loginLog/update', views.admin.loginLog.update),
path('admin/loginLog/delete', views.admin.loginLog.delete),
path('admin/opLog/list', views.admin.opLog.list_api),
path('admin/errorLog/list', views.admin.errorLog.list_api),
path('admin/user/list', views.admin.user.list_api),
path('admin/user/create', views.admin.user.create),
path('admin/user/update', views.admin.user.update),
path('admin/user/updatePwd', views.admin.user.updatePwd),
path('admin/user/delete', views.admin.user.delete),
path('admin/user/info', views.admin.user.info),
path('admin/adminLogin', views.admin.user.admin_login),
# 前台管理api
path('index/classification/list', views.index.classification.list_api),
path('index/tag/list', views.index.tag.list_api),
path('index/user/login', views.index.user.login),
path('index/user/register', views.index.user.register),
path('index/user/info', views.index.user.info),
path('index/user/update', views.index.user.update),
path('index/user/updatePwd', views.index.user.updatePwd),
path('index/notice/list_api', views.index.notice.list_api),
path('index/thing/list', views.index.thing.list_api),
path('index/thing/detail', views.index.thing.detail),
path('index/thing/increaseWishCount', views.index.thing.increaseWishCount),
path('index/thing/addWishUser', views.index.thing.addWishUser),
path('index/thing/removeWishUser', views.index.thing.removeWishUser),
path('index/thing/getWishThingList', views.index.thing.getWishThingList),
path('index/thing/addCollectUser', views.index.thing.addCollectUser),
path('index/thing/removeCollectUser', views.index.thing.removeCollectUser),
path('index/thing/getCollectThingList', views.index.thing.getCollectThingList),
path('index/thing/increaseRecommendCount', views.index.thing.increaseRecommendCount),
path('index/thing/listUserThing', views.index.thing.list_user_thing_api),
path('index/thing/create', views.index.thing.create),
path('index/thing/update', views.index.thing.update),
path('index/comment/list', views.index.comment.list_api),
path('index/comment/listMyComments', views.index.comment.list_my_comment),
path('index/comment/create', views.index.comment.create),
path('index/comment/delete', views.index.comment.delete),
path('index/comment/like', views.index.comment.like),
path('index/order/list', views.index.order.list_api),
path('index/order/create', views.index.order.create),
path('index/order/cancel_order', views.index.order.cancel_order),
path('index/address/list', views.index.address.list_api),
path('index/address/create', views.index.address.create),
path('index/address/update', views.index.address.update),
path('index/address/delete', views.index.address.delete),
]

@ -0,0 +1,87 @@
import datetime
import hashlib
import time
from rest_framework.views import exception_handler
from myapp.serializers import ErrorLogSerializer
def get_timestamp():
return int(round(time.time() * 1000))
def md5value(key):
input_name = hashlib.md5()
input_name.update(key.encode("utf-8"))
md5str = (input_name.hexdigest()).lower()
print('计算md5:', md5str)
return md5str
def dict_fetchall(cursor): # cursor是执行sql_str后的记录作入参
columns = [col[0] for col in cursor.description] # 得到域的名字col[0]组成List
return [
dict(zip(columns, row)) for row in cursor.fetchall()
]
def get_ip(request):
"""
获取请求者的IP信息
"""
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
ip = x_forwarded_for.split(',')[0]
else:
ip = request.META.get('REMOTE_ADDR')
return ip
def get_ua(request):
"""
获取请求者的IP信息
"""
ua = request.META.get('HTTP_USER_AGENT')
return ua[0:200]
def getWeekDays():
"""
获取近一周的日期
"""
week_days = []
now = datetime.datetime.now()
for i in range(7):
day = now - datetime.timedelta(days=i)
week_days.append(day.strftime('%Y-%m-%d %H:%M:%S.%f')[:10])
week_days.reverse() # 逆序
return week_days
def get_monday():
"""
获取本周周一日期
"""
now = datetime.datetime.now()
monday = now - datetime.timedelta(now.weekday())
return monday.strftime('%Y-%m-%d %H:%M:%S.%f')[:10]
def log_error(request, content):
"""
记录错误日志
"""
ip = get_ip(request)
method = request.method
url = request.path
data = {
'ip': ip,
'method': method,
'url': url,
'content': content
}
# 入库
serializer = ErrorLogSerializer(data=data)
if serializer.is_valid():
serializer.save()

@ -0,0 +1,2 @@
from myapp.views.admin import *
from myapp.views.index import *

@ -0,0 +1,14 @@
from myapp.views.admin.thing import *
from myapp.views.admin.classification import *
from myapp.views.admin.tag import *
from myapp.views.admin.user import *
from myapp.views.admin.comment import *
from myapp.views.admin.record import *
from myapp.views.admin.overview import *
from myapp.views.admin.loginLog import *
from myapp.views.admin.order import *
from myapp.views.admin.opLog import *
from myapp.views.admin.errorLog import *
from myapp.views.admin.banner import *
from myapp.views.admin.ad import *
from myapp.views.admin.notice import *

@ -0,0 +1,68 @@
# Create your views here.
from rest_framework.decorators import api_view, authentication_classes
from myapp.auth.authentication import AdminTokenAuthtication
from myapp.handler import APIResponse
from myapp.models import Ad
from myapp.permission.permission import isDemoAdminUser
from myapp.serializers import AdSerializer
@api_view(['GET'])
def list_api(request):
if request.method == 'GET':
ads = Ad.objects.all().order_by('-create_time')
serializer = AdSerializer(ads, many=True)
return APIResponse(code=0, msg='查询成功', data=serializer.data)
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def create(request):
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
serializer = AdSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='创建成功', data=serializer.data)
return APIResponse(code=1, msg='创建失败')
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def update(request):
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
try:
pk = request.GET.get('id', -1)
ad = Ad.objects.get(pk=pk)
except Ad.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
serializer = AdSerializer(ad, data=request.data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='更新成功', data=serializer.data)
else:
print(serializer.errors)
return APIResponse(code=1, msg='更新失败')
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def delete(request):
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
try:
ids = request.GET.get('ids')
ids_arr = ids.split(',')
Ad.objects.filter(id__in=ids_arr).delete()
except Ad.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
return APIResponse(code=0, msg='删除成功')

@ -0,0 +1,68 @@
# Create your views here.
from rest_framework.decorators import api_view, authentication_classes
from myapp.auth.authentication import AdminTokenAuthtication
from myapp.handler import APIResponse
from myapp.models import Banner
from myapp.permission.permission import isDemoAdminUser
from myapp.serializers import BannerSerializer
@api_view(['GET'])
def list_api(request):
if request.method == 'GET':
banners = Banner.objects.all().order_by('-create_time')
serializer = BannerSerializer(banners, many=True)
return APIResponse(code=0, msg='查询成功', data=serializer.data)
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def create(request):
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
serializer = BannerSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='创建成功', data=serializer.data)
return APIResponse(code=1, msg='创建失败')
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def update(request):
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
try:
pk = request.GET.get('id', -1)
banner = Banner.objects.get(pk=pk)
except Banner.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
serializer = BannerSerializer(banner, data=request.data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='更新成功', data=serializer.data)
else:
print(serializer.errors)
return APIResponse(code=1, msg='更新失败')
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def delete(request):
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
try:
ids = request.GET.get('ids')
ids_arr = ids.split(',')
Banner.objects.filter(id__in=ids_arr).delete()
except Banner.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
return APIResponse(code=0, msg='删除成功')

@ -0,0 +1,74 @@
# Create your views here.
from django.db import connection
from django.db.models import Q
from rest_framework.decorators import api_view, authentication_classes
from myapp.auth.authentication import AdminTokenAuthtication
from myapp.handler import APIResponse
from myapp.models import Classification
from myapp.permission.permission import isDemoAdminUser
from myapp.serializers import ClassificationSerializer
from myapp.utils import dict_fetchall
@api_view(['GET'])
def list_api(request):
if request.method == 'GET':
classifications = Classification.objects.all().order_by('-create_time')
serializer = ClassificationSerializer(classifications, many=True)
return APIResponse(code=0, msg='查询成功', data=serializer.data)
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def create(request):
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
classification = Classification.objects.filter(title=request.data['title'])
if len(classification) > 0:
return APIResponse(code=1, msg='该名称已存在')
serializer = ClassificationSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='创建成功', data=serializer.data)
return APIResponse(code=1, msg='创建失败')
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def update(request):
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
try:
pk = request.GET.get('id', -1)
print(pk)
classification = Classification.objects.get(pk=pk)
except Classification.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
serializer = ClassificationSerializer(classification, data=request.data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='更新成功', data=serializer.data)
return APIResponse(code=1, msg='更新失败')
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def delete(request):
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
try:
ids = request.GET.get('ids')
ids_arr = ids.split(',')
# 删除自身和自身的子孩子
Classification.objects.filter(Q(id__in=ids_arr)).delete()
except Classification.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
return APIResponse(code=0, msg='删除成功')

@ -0,0 +1,69 @@
# Create your views here.
from rest_framework.decorators import api_view, authentication_classes
from myapp.auth.authentication import AdminTokenAuthtication
from myapp.handler import APIResponse
from myapp.models import Comment
from myapp.permission.permission import isDemoAdminUser
from myapp.serializers import CommentSerializer
@api_view(['GET'])
def list_api(request):
if request.method == 'GET':
comments = Comment.objects.select_related("thing").all().order_by('-comment_time')
# print(comments)
serializer = CommentSerializer(comments, many=True)
return APIResponse(code=0, msg='查询成功', data=serializer.data)
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def create(request):
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
serializer = CommentSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='创建成功', data=serializer.data)
else:
print(serializer.errors)
return APIResponse(code=1, msg='创建失败')
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def update(request):
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
try:
pk = request.GET.get('id', -1)
comments = Comment.objects.get(pk=pk)
except Comment.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
serializer = CommentSerializer(comments, data=request.data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='更新成功', data=serializer.data)
return APIResponse(code=1, msg='更新失败')
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def delete(request):
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
try:
ids = request.GET.get('ids')
ids_arr = ids.split(',')
Comment.objects.filter(id__in=ids_arr).delete()
except Comment.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
return APIResponse(code=0, msg='删除成功')

@ -0,0 +1,14 @@
# Create your views here.
from rest_framework.decorators import api_view
from myapp.handler import APIResponse
from myapp.models import ErrorLog
from myapp.serializers import ErrorLogSerializer
@api_view(['GET'])
def list_api(request):
if request.method == 'GET':
errorLogs = ErrorLog.objects.all().order_by('-log_time')
serializer = ErrorLogSerializer(errorLogs, many=True)
return APIResponse(code=0, msg='查询成功', data=serializer.data)

@ -0,0 +1,60 @@
# Create your views here.
from rest_framework.decorators import api_view, authentication_classes
from myapp.auth.authentication import AdminTokenAuthtication
from myapp.handler import APIResponse
from myapp.models import LoginLog
from myapp.permission.permission import isDemoAdminUser
from myapp.serializers import LoginLogSerializer
@api_view(['GET'])
def list_api(request):
if request.method == 'GET':
loginLogs = LoginLog.objects.all().order_by('-log_time')
serializer = LoginLogSerializer(loginLogs, many=True)
return APIResponse(code=0, msg='查询成功', data=serializer.data)
@api_view(['POST'])
def create(request):
serializer = LoginLogSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='创建成功', data=serializer.data)
return APIResponse(code=1, msg='创建失败')
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def update(request):
try:
pk = request.GET.get('id', -1)
loginLogs = LoginLog.objects.get(pk=pk)
except LoginLog.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
serializer = LoginLogSerializer(loginLogs, data=request.data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='更新成功', data=serializer.data)
return APIResponse(code=1, msg='更新失败')
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def delete(request):
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
try:
ids = request.GET.get('ids')
ids_arr = ids.split(',')
LoginLog.objects.filter(id__in=ids_arr).delete()
except LoginLog.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
return APIResponse(code=0, msg='删除成功')

@ -0,0 +1,68 @@
# Create your views here.
from rest_framework.decorators import api_view, authentication_classes
from myapp.auth.authentication import AdminTokenAuthtication
from myapp.handler import APIResponse
from myapp.models import Notice
from myapp.permission.permission import isDemoAdminUser
from myapp.serializers import NoticeSerializer
@api_view(['GET'])
def list_api(request):
if request.method == 'GET':
notices = Notice.objects.all().order_by('-create_time')
serializer = NoticeSerializer(notices, many=True)
return APIResponse(code=0, msg='查询成功', data=serializer.data)
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def create(request):
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
serializer = NoticeSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='创建成功', data=serializer.data)
return APIResponse(code=1, msg='创建失败')
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def update(request):
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
try:
pk = request.GET.get('id', -1)
notice = Notice.objects.get(pk=pk)
except Notice.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
serializer = NoticeSerializer(notice, data=request.data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='更新成功', data=serializer.data)
else:
print(serializer.errors)
return APIResponse(code=1, msg='更新失败')
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def delete(request):
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
try:
ids = request.GET.get('ids')
ids_arr = ids.split(',')
Notice.objects.filter(id__in=ids_arr).delete()
except Notice.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
return APIResponse(code=0, msg='删除成功')

@ -0,0 +1,14 @@
# Create your views here.
from rest_framework.decorators import api_view
from myapp.handler import APIResponse
from myapp.models import OpLog
from myapp.serializers import OpLogSerializer
@api_view(['GET'])
def list_api(request):
if request.method == 'GET':
opLogs = OpLog.objects.all().order_by('-re_time')[:100]
serializer = OpLogSerializer(opLogs, many=True)
return APIResponse(code=0, msg='查询成功', data=serializer.data)

@ -0,0 +1,175 @@
# Create your views here.
import datetime
from rest_framework.decorators import api_view, authentication_classes
from myapp import utils
from myapp.auth.authentication import AdminTokenAuthtication
from myapp.handler import APIResponse
from myapp.models import Order, Thing
from myapp.permission.permission import isDemoAdminUser
from myapp.serializers import OrderSerializer
@api_view(['GET'])
def list_api(request):
if request.method == 'GET':
orders = Order.objects.all().order_by('-order_time')
serializer = OrderSerializer(orders, many=True)
return APIResponse(code=0, msg='查询成功', data=serializer.data)
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def create(request):
"""
创建订单
"""
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
data = request.data.copy()
if data['user'] is None or data['thing'] is None or data['count'] is None:
return APIResponse(code=1, msg='参数错误')
thing = Thing.objects.get(pk=data['thing'])
count = data['count']
if thing.repertory < int(count):
return APIResponse(code=1, msg='库存不足')
create_time = datetime.datetime.now()
data['create_time'] = create_time
data['order_number'] = str(utils.get_timestamp())
data['status'] = '1'
serializer = OrderSerializer(data=data)
if serializer.is_valid():
serializer.save()
# 减库存(支付后)
# thing.repertory = thing.repertory - int(count)
# thing.save()
return APIResponse(code=0, msg='创建成功', data=serializer.data)
else:
print(serializer.errors)
return APIResponse(code=1, msg='创建失败')
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def update(request):
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
try:
pk = request.GET.get('id', -1)
order = Order.objects.get(pk=pk)
except Order.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
serializer = OrderSerializer(order, data=request.data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='更新成功', data=serializer.data)
else:
print(serializer.errors)
return APIResponse(code=1, msg='更新失败')
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def pass_order(request):
"""
取消
"""
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
try:
pk = request.GET.get('id', -1)
order = Order.objects.get(pk=pk)
except Order.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
data = {
'status': 2
}
serializer = OrderSerializer(order, data=data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='成功', data=serializer.data)
else:
print(serializer.errors)
return APIResponse(code=1, msg='更新失败')
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def cancel_order(request):
"""
取消
"""
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
try:
pk = request.GET.get('id', -1)
order = Order.objects.get(pk=pk)
except Order.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
data = {
'status': 7
}
serializer = OrderSerializer(order, data=data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='取消成功', data=serializer.data)
else:
print(serializer.errors)
return APIResponse(code=1, msg='更新失败')
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def delay(request):
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
try:
pk = request.GET.get('id', -1)
order = Order.objects.get(pk=pk)
except Order.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
if order.delayed:
return APIResponse(code=1, msg='已超最大延期次数')
else:
data = {
"delayed": True,
"expect_time": order.expect_time + datetime.timedelta(days=30)
}
serializer = OrderSerializer(order, data=data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='延期成功', data=serializer.data)
else:
print(serializer.errors)
return APIResponse(code=1, msg='延期失败')
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def delete(request):
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
try:
ids = request.GET.get('ids')
ids_arr = ids.split(',')
Order.objects.filter(id__in=ids_arr).delete()
except Order.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
return APIResponse(code=0, msg='删除成功')

@ -0,0 +1,98 @@
# Create your views here.
import datetime
import locale
import platform
import random
import time
from multiprocessing import cpu_count
import psutil
from django.db import connection
from rest_framework.decorators import api_view, authentication_classes
from myapp import utils
from myapp.handler import APIResponse
from myapp.models import Thing, Order
from myapp.utils import dict_fetchall
from myapp.auth.authentication import AdminTokenAuthtication
@api_view(['GET'])
@authentication_classes([AdminTokenAuthtication])
def count(request):
if request.method == 'GET':
now = datetime.datetime.now()
# 统计排名(sql语句)
sql_str = "select title, pv as count from b_thing order by count desc limit 10; "
with connection.cursor() as cursor:
cursor.execute(sql_str)
order_rank_data = dict_fetchall(cursor)
# 统计分类比例(sql语句)
sql_str = "select B.title, count(B.title) as count from b_thing A join B_classification B on " \
"A.classification_id = B.id group by B.title order by count desc limit 5; "
with connection.cursor() as cursor:
cursor.execute(sql_str)
classification_rank_data = dict_fetchall(cursor)
# 统计最近一周访问量(sql语句)
visit_data = []
week_days = utils.getWeekDays()
for day in week_days:
sql_str = "select re_ip, count(re_ip) as count from b_op_log where re_time like '" + day + "%' group by re_ip"
with connection.cursor() as cursor:
cursor.execute(sql_str)
ip_data = dict_fetchall(cursor)
uv = len(ip_data)
pv = 0
for item in ip_data:
pv = pv + item['count']
visit_data.append({
"day": day,
"uv": uv + random.randint(1, 20),
"pv": pv + random.randint(20, 100)
})
data = {
'order_rank_data': order_rank_data,
'classification_rank_data': classification_rank_data,
'visit_data': visit_data
}
return APIResponse(code=0, msg='查询成功', data=data)
@api_view(['GET'])
@authentication_classes([AdminTokenAuthtication])
def sysInfo(request):
if request.method == 'GET':
pyVersion = platform.python_version()
osBuild = platform.architecture()
node = platform.node()
pf = platform.platform()
processor = platform.processor()
pyComp = platform.python_compiler()
osName = platform.system()
memory = psutil.virtual_memory()
data = {
'sysName': '后台管理系统',
'versionName': '1.1.0',
'osName': osName,
'pyVersion': pyVersion,
'osBuild': osBuild,
'node': node,
'pf': pf,
'processor': processor,
'cpuCount': cpu_count(),
'pyComp': pyComp,
'cpuLoad': round((psutil.cpu_percent(1)), 2),
'memory': round((float(memory.total) / 1024 / 1024 / 1024), 2),
'usedMemory': round((float(memory.used) / 1024 / 1024 / 1024), 2),
'percentMemory': round((float(memory.used) / float(memory.total) * 100), 2),
'sysLan': locale.getdefaultlocale(),
'sysZone': time.strftime('%Z', time.localtime())
}
return APIResponse(code=0, msg='查询成功', data=data)

@ -0,0 +1,53 @@
# Create your views here.
from rest_framework.decorators import api_view
from myapp.handler import APIResponse
from myapp.models import Record
from myapp.serializers import RecordSerializer
@api_view(['GET'])
def list_api(request):
if request.method == 'GET':
records = Record.objects.all()
serializer = RecordSerializer(records, many=True)
return APIResponse(code=0, msg='查询成功', data=serializer.data)
@api_view(['POST'])
def create(request):
serializer = RecordSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='创建成功', data=serializer.data)
return APIResponse(code=1, msg='创建失败')
@api_view(['POST'])
def update(request):
try:
pk = request.GET.get('id', -1)
records = Record.objects.get(pk=pk)
except Record.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
serializer = RecordSerializer(records, data=request.data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='更新成功', data=serializer.data)
return APIResponse(code=1, msg='更新失败')
@api_view(['POST'])
def delete(request):
try:
ids = request.GET.get('ids')
ids_arr = ids.split(',')
Record.objects.filter(id__in=ids_arr).delete()
except Record.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
return APIResponse(code=0, msg='删除成功')

@ -0,0 +1,75 @@
# Create your views here.
from rest_framework.decorators import api_view, authentication_classes
from myapp import utils
from myapp.auth.authentication import AdminTokenAuthtication
from myapp.handler import APIResponse
from myapp.models import Tag
from myapp.permission.permission import isDemoAdminUser
from myapp.serializers import TagSerializer
@api_view(['GET'])
def list_api(request):
if request.method == 'GET':
tags = Tag.objects.all().order_by('-create_time')
serializer = TagSerializer(tags, many=True)
return APIResponse(code=0, msg='查询成功', data=serializer.data)
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def create(request):
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
tags = Tag.objects.filter(title=request.data['title'])
if len(tags) > 0:
return APIResponse(code=1, msg='该名称已存在')
serializer = TagSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='创建成功', data=serializer.data)
else:
utils.log_error(request, '参数错误')
return APIResponse(code=1, msg='创建失败')
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def update(request):
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
try:
pk = request.GET.get('id', -1)
tags = Tag.objects.get(pk=pk)
except Tag.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
serializer = TagSerializer(tags, data=request.data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='更新成功', data=serializer.data)
else:
utils.log_error(request, '参数错误')
return APIResponse(code=1, msg='更新失败')
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def delete(request):
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
try:
ids = request.GET.get('ids')
ids_arr = ids.split(',')
Tag.objects.filter(id__in=ids_arr).delete()
except Tag.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
return APIResponse(code=0, msg='删除成功')

@ -0,0 +1,104 @@
# Create your views here.
from rest_framework.decorators import api_view, authentication_classes
from myapp import utils
from myapp.auth.authentication import AdminTokenAuthtication
from myapp.handler import APIResponse
from myapp.models import Classification, Thing, Tag
from myapp.permission.permission import isDemoAdminUser
from myapp.serializers import ThingSerializer, UpdateThingSerializer
@api_view(['GET'])
def list_api(request):
if request.method == 'GET':
keyword = request.GET.get("keyword", None)
c = request.GET.get("c", None)
tag = request.GET.get("tag", None)
if keyword:
things = Thing.objects.filter(title__contains=keyword).order_by('create_time')
elif c:
classification = Classification.objects.get(pk=c)
things = classification.classification_thing.all()
elif tag:
tag = Tag.objects.get(id=tag)
print(tag)
things = tag.thing_set.all()
else:
things = Thing.objects.all().order_by('create_time')
serializer = ThingSerializer(things, many=True)
return APIResponse(code=0, msg='查询成功', data=serializer.data)
@api_view(['GET'])
def detail(request):
try:
pk = request.GET.get('id', -1)
thing = Thing.objects.get(pk=pk)
except Thing.DoesNotExist:
utils.log_error(request, '对象不存在')
return APIResponse(code=1, msg='对象不存在')
if request.method == 'GET':
serializer = ThingSerializer(thing)
return APIResponse(code=0, msg='查询成功', data=serializer.data)
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def create(request):
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
serializer = ThingSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='创建成功', data=serializer.data)
else:
print(serializer.errors)
utils.log_error(request, '参数错误')
return APIResponse(code=1, msg='创建失败')
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def update(request):
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
try:
pk = request.GET.get('id', -1)
thing = Thing.objects.get(pk=pk)
except Thing.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
serializer = UpdateThingSerializer(thing, data=request.data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='查询成功', data=serializer.data)
else:
print(serializer.errors)
utils.log_error(request, '参数错误')
return APIResponse(code=1, msg='更新失败')
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def delete(request):
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
try:
ids = request.GET.get('ids')
ids_arr = ids.split(',')
Thing.objects.filter(id__in=ids_arr).delete()
except Thing.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
return APIResponse(code=0, msg='删除成功')

@ -0,0 +1,176 @@
# Create your views here.
import datetime
from rest_framework.decorators import api_view, authentication_classes
from myapp import utils
from myapp.auth.authentication import AdminTokenAuthtication
from myapp.handler import APIResponse
from myapp.models import User
from myapp.permission.permission import isDemoAdminUser
from myapp.serializers import UserSerializer, LoginLogSerializer
from myapp.utils import md5value
def make_login_log(request):
try:
username = request.data['username']
data = {
"username": username,
"ip": utils.get_ip(request),
"ua": utils.get_ua(request)
}
serializer = LoginLogSerializer(data=data)
if serializer.is_valid():
serializer.save()
else:
print(serializer.errors)
except Exception as e:
print(e)
@api_view(['POST'])
def admin_login(request):
username = request.data['username']
password = utils.md5value(request.data['password'])
users = User.objects.filter(username=username, password=password, role__in=['1', '3'])
if len(users) > 0:
user = users[0]
data = {
'username': username,
'password': password,
'admin_token': md5value(username) # 生成令牌
}
serializer = UserSerializer(user, data=data)
if serializer.is_valid():
serializer.save()
make_login_log(request)
return APIResponse(code=0, msg='登录成功', data=serializer.data)
else:
print(serializer.errors)
return APIResponse(code=1, msg='用户名或密码错误')
@api_view(['GET'])
def info(request):
if request.method == 'GET':
pk = request.GET.get('id', -1)
user = User.objects.get(pk=pk)
serializer = UserSerializer(user)
return APIResponse(code=0, msg='查询成功', data=serializer.data)
@api_view(['GET'])
def list_api(request):
if request.method == 'GET':
keyword = request.GET.get("keyword", '')
users = User.objects.filter(username__contains=keyword).order_by('-create_time')
serializer = UserSerializer(users, many=True)
return APIResponse(code=0, msg='查询成功', data=serializer.data)
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def create(request):
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
print(request.data)
if not request.data.get('username', None) or not request.data.get('password', None):
return APIResponse(code=1, msg='用户名或密码不能为空')
users = User.objects.filter(username=request.data['username'])
if len(users) > 0:
return APIResponse(code=1, msg='该用户名已存在')
data = request.data.copy()
data.update({'password': utils.md5value(request.data['password'])})
serializer = UserSerializer(data=data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='创建成功', data=serializer.data)
else:
print(serializer.errors)
return APIResponse(code=1, msg='创建失败')
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def update(request):
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
try:
pk = request.GET.get('id', -1)
user = User.objects.get(pk=pk)
except User.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
data = request.data.copy()
if 'username' in data.keys():
del data['username']
if 'password' in data.keys():
del data['password']
serializer = UserSerializer(user, data=data)
print(serializer.is_valid())
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='更新成功', data=serializer.data)
else:
print(serializer.errors)
return APIResponse(code=1, msg='更新失败')
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def updatePwd(request):
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
try:
pk = request.GET.get('id', -1)
user = User.objects.get(pk=pk)
except User.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
password = request.data.get('password', None)
newPassword1 = request.data.get('newPassword1', None)
newPassword2 = request.data.get('newPassword2', None)
if not password or not newPassword1 or not newPassword2:
return APIResponse(code=1, msg='不能为空')
if user.password != utils.md5value(password):
return APIResponse(code=1, msg='原密码不正确')
if newPassword1 != newPassword2:
return APIResponse(code=1, msg='两次密码不一致')
data = request.data.copy()
data.update({'password': utils.md5value(newPassword1)})
serializer = UserSerializer(user, data=data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='更新成功', data=serializer.data)
else:
print(serializer.errors)
return APIResponse(code=1, msg='更新失败')
@api_view(['POST'])
@authentication_classes([AdminTokenAuthtication])
def delete(request):
if isDemoAdminUser(request):
return APIResponse(code=1, msg='演示帐号无法操作')
try:
ids = request.GET.get('ids')
ids_arr = ids.split(',')
User.objects.filter(id__in=ids_arr).delete()
except User.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
return APIResponse(code=0, msg='删除成功')

@ -0,0 +1,8 @@
from myapp.views.index.classification import *
from myapp.views.index.tag import *
from myapp.views.index.user import *
from myapp.views.index.thing import *
from myapp.views.index.comment import *
from myapp.views.index.order import *
from myapp.views.index.notice import *
from myapp.views.index.address import *

@ -0,0 +1,87 @@
# Create your views here.
from rest_framework.decorators import api_view, authentication_classes
from myapp import utils
from myapp.auth.authentication import TokenAuthtication
from myapp.handler import APIResponse
from myapp.models import Address
from myapp.serializers import AddressSerializer
@api_view(['GET'])
def list_api(request):
if request.method == 'GET':
userId = request.GET.get('userId', -1)
if userId != -1:
addresses = Address.objects.filter(user=userId).order_by('-create_time')
serializer = AddressSerializer(addresses, many=True)
return APIResponse(code=0, msg='查询成功', data=serializer.data)
else:
return APIResponse(code=1, msg='userId不能为空')
@api_view(['POST'])
@authentication_classes([TokenAuthtication])
def create(request):
address_content = request.POST.get('desc', None)
user = request.POST.get('user', None)
default = request.POST.get('default', False)
if address_content is None or user is None:
return APIResponse(code=1, msg='不能为空')
if default:
# 其他置为false
Address.objects.filter(user=user).update(default=False)
serializer = AddressSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='创建成功', data=serializer.data)
else:
utils.log_error(request, '参数错误')
return APIResponse(code=1, msg='创建失败')
@api_view(['POST'])
@authentication_classes([TokenAuthtication])
def update(request):
try:
pk = request.GET.get('id', -1)
addresses = Address.objects.get(pk=pk)
except Address.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
user = request.data['user']
default = request.data['default']
if default:
# 其他置为false
Address.objects.filter(user=user).update(default=False)
serializer = AddressSerializer(addresses, data=request.data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='更新成功', data=serializer.data)
else:
utils.log_error(request, '参数错误')
return APIResponse(code=1, msg='更新失败')
@api_view(['POST'])
@authentication_classes([TokenAuthtication])
def delete(request):
try:
ids = request.GET.get('ids')
ids_arr = ids.split(',')
Address.objects.filter(id__in=ids_arr).delete()
except Address.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
return APIResponse(code=0, msg='删除成功')

@ -0,0 +1,21 @@
# Create your views here.
from django.db import connection
from rest_framework.decorators import api_view
from myapp.handler import APIResponse
from myapp.models import Classification
from myapp.serializers import ClassificationSerializer
from myapp.utils import dict_fetchall
@api_view(['GET'])
def list_api(request):
if request.method == 'GET':
classifications = Classification.objects.all().order_by('-create_time')
serializer = ClassificationSerializer(classifications, many=True)
return APIResponse(code=0, msg='查询成功', data=serializer.data)

@ -0,0 +1,87 @@
# Create your views here.
from rest_framework.decorators import api_view, authentication_classes, throttle_classes
from myapp.auth.MyRateThrottle import MyRateThrottle
from myapp.auth.authentication import AdminTokenAuthtication
from myapp.handler import APIResponse
from myapp.models import Comment
from myapp.permission.permission import isDemoAdminUser
from myapp.serializers import CommentSerializer
@api_view(['GET'])
def list_api(request):
if request.method == 'GET':
thingId = request.GET.get("thingId", None)
order = request.GET.get("order", 'recent')
if thingId:
if order == 'recent':
orderBy = '-comment_time'
else:
orderBy = '-like_count'
comments = Comment.objects.select_related("thing").filter(thing=thingId).order_by(orderBy)
# print(comments)
serializer = CommentSerializer(comments, many=True)
return APIResponse(code=0, msg='查询成功', data=serializer.data)
else:
return APIResponse(code=1, msg='thingId不能为空')
@api_view(['GET'])
def list_my_comment(request):
if request.method == 'GET':
userId = request.GET.get("userId", None)
order = request.GET.get("order", 'recent')
if userId:
if order == 'recent':
orderBy = '-comment_time'
else:
orderBy = '-like_count'
comments = Comment.objects.select_related("thing").filter(user=userId).order_by(orderBy)
# print(comments)
serializer = CommentSerializer(comments, many=True)
return APIResponse(code=0, msg='查询成功', data=serializer.data)
else:
return APIResponse(code=1, msg='userId不能为空')
@api_view(['POST'])
@throttle_classes([MyRateThrottle])
def create(request):
serializer = CommentSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='创建成功', data=serializer.data)
else:
print(serializer.errors)
return APIResponse(code=1, msg='创建失败')
@api_view(['POST'])
def delete(request):
try:
ids = request.GET.get('ids')
ids_arr = ids.split(',')
Comment.objects.filter(id__in=ids_arr).delete()
except Comment.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
return APIResponse(code=0, msg='删除成功')
@api_view(['POST'])
def like(request):
try:
commentId = request.GET.get('commentId')
comment = Comment.objects.get(pk=commentId)
comment.like_count += 1
comment.save()
except Comment.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
return APIResponse(code=0, msg='推荐成功')

@ -0,0 +1,15 @@
# Create your views here.
from rest_framework.decorators import api_view
from myapp.handler import APIResponse
from myapp.models import Notice
from myapp.serializers import NoticeSerializer
@api_view(['GET'])
def list_api(request):
if request.method == 'GET':
notices = Notice.objects.all().order_by('-create_time')
serializer = NoticeSerializer(notices, many=True)
return APIResponse(code=0, msg='查询成功', data=serializer.data)

@ -0,0 +1,85 @@
# Create your views here.
import datetime
from rest_framework.decorators import api_view, authentication_classes
from myapp import utils
from myapp.auth.authentication import TokenAuthtication
from myapp.handler import APIResponse
from myapp.models import Order, Thing
from myapp.serializers import OrderSerializer
@api_view(['GET'])
def list_api(request):
if request.method == 'GET':
userId = request.GET.get('userId', -1)
orderStatus = request.GET.get('orderStatus', '')
orders = Order.objects.all().filter(user=userId).filter(status__contains=orderStatus).order_by('-order_time')
serializer = OrderSerializer(orders, many=True)
return APIResponse(code=0, msg='查询成功', data=serializer.data)
@api_view(['POST'])
@authentication_classes([TokenAuthtication])
def create(request):
data = request.data.copy()
if data['user'] is None or data['thing'] is None or data['count'] is None:
return APIResponse(code=1, msg='参数错误')
# thing = Thing.objects.get(pk=data['thing'])
# count = data['count']
# if thing.repertory < int(count):
# return APIResponse(code=1, msg='库存不足')
create_time = datetime.datetime.now()
data['create_time'] = create_time
data['order_number'] = str(utils.get_timestamp())
data['status'] = '1'
serializer = OrderSerializer(data=data)
if serializer.is_valid():
serializer.save()
# 减库存(支付后)
# thing.repertory = thing.repertory - int(count)
# thing.save()
return APIResponse(code=0, msg='创建成功', data=serializer.data)
else:
print(serializer.errors)
return APIResponse(code=1, msg='创建失败')
@api_view(['POST'])
@authentication_classes([TokenAuthtication])
def cancel_order(request):
"""
cancal
"""
try:
pk = request.GET.get('id', -1)
order = Order.objects.get(pk=pk)
except Order.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
data = {
'status': 7
}
serializer = OrderSerializer(order, data=data)
if serializer.is_valid():
serializer.save()
# 加库存
# thingId = request.data['thing']
# thing = Thing.objects.get(pk=thingId)
# thing.repertory = thing.repertory + 1
# thing.save()
# 加积分
# order.user.score = order.user.score + 1
# order.user.save()
return APIResponse(code=0, msg='取消成功', data=serializer.data)
else:
print(serializer.errors)
return APIResponse(code=1, msg='更新失败')

@ -0,0 +1,15 @@
# Create your views here.
from rest_framework.decorators import api_view
from myapp.handler import APIResponse
from myapp.models import Tag
from myapp.serializers import TagSerializer
@api_view(['GET'])
def list_api(request):
if request.method == 'GET':
tags = Tag.objects.all().order_by('-create_time')
serializer = TagSerializer(tags, many=True)
return APIResponse(code=0, msg='查询成功', data=serializer.data)

@ -0,0 +1,264 @@
# Create your views here.
from django.db import connection
from rest_framework.decorators import api_view, authentication_classes
from myapp import utils
from myapp.handler import APIResponse
from myapp.models import Classification, Thing, Tag, User
from myapp.serializers import ThingSerializer, ClassificationSerializer, ListThingSerializer, DetailThingSerializer, \
UpdateThingSerializer
from myapp.utils import dict_fetchall
@api_view(['GET'])
def list_api(request):
if request.method == 'GET':
keyword = request.GET.get("keyword", None)
c = request.GET.get("c", None)
tag = request.GET.get("tag", None)
sort = request.GET.get("sort", 'recent')
# 排序方式
order = '-create_time'
if sort == 'recent':
order = '-create_time'
elif sort == 'hot' or sort == 'recommend':
order = '-pv'
if keyword:
things = Thing.objects.filter(title__contains=keyword).filter(status='0').order_by(order)
# todo
elif c and int(c) > -1:
ids = [c]
things = Thing.objects.filter(classification_id__in=ids).filter(status='0').order_by(order)
elif tag:
tag = Tag.objects.get(id=tag)
print(tag)
things = tag.thing_set.all().filter(status='0').order_by(order)
else:
things = Thing.objects.all().defer('wish').filter(status='0').order_by(order)
serializer = ListThingSerializer(things, many=True)
return APIResponse(code=0, msg='查询成功', data=serializer.data)
@api_view(['GET'])
def detail(request):
try:
pk = request.GET.get('id', -1)
thing = Thing.objects.get(pk=pk)
thing.pv = thing.pv + 1
thing.save()
except Thing.DoesNotExist:
utils.log_error(request, '对象不存在')
return APIResponse(code=1, msg='对象不存在')
if request.method == 'GET':
serializer = ThingSerializer(thing)
return APIResponse(code=0, msg='查询成功', data=serializer.data)
@api_view(['POST'])
def increaseWishCount(request):
try:
pk = request.GET.get('id', -1)
thing = Thing.objects.get(pk=pk)
# wish_count加1
thing.wish_count = thing.wish_count + 1
thing.save()
except Thing.DoesNotExist:
utils.log_error(request, '对象不存在')
return APIResponse(code=1, msg='对象不存在')
serializer = ThingSerializer(thing)
return APIResponse(code=0, msg='操作成功', data=serializer.data)
@api_view(['POST'])
def increaseRecommendCount(request):
try:
pk = request.GET.get('id', -1)
thing = Thing.objects.get(pk=pk)
# recommend_count加1
thing.recommend_count = thing.recommend_count + 1
thing.save()
except Thing.DoesNotExist:
utils.log_error(request, '对象不存在')
return APIResponse(code=1, msg='对象不存在')
serializer = ThingSerializer(thing)
return APIResponse(code=0, msg='操作成功', data=serializer.data)
@api_view(['POST'])
def addWishUser(request):
try:
username = request.GET.get('username', None)
thingId = request.GET.get('thingId', None)
if username and thingId:
user = User.objects.get(username=username)
thing = Thing.objects.get(pk=thingId)
if user not in thing.wish.all():
thing.wish.add(user)
thing.wish_count += 1
thing.save()
except Thing.DoesNotExist:
utils.log_error(request, '操作失败')
return APIResponse(code=1, msg='操作失败')
serializer = ThingSerializer(thing)
return APIResponse(code=0, msg='操作成功', data=serializer.data)
@api_view(['POST'])
def removeWishUser(request):
try:
username = request.GET.get('username', None)
thingId = request.GET.get('thingId', None)
if username and thingId:
user = User.objects.get(username=username)
thing = Thing.objects.get(pk=thingId)
if user in thing.wish.all():
thing.wish.remove(user)
thing.wish_count -= 1
thing.save()
except Thing.DoesNotExist:
utils.log_error(request, '操作失败')
return APIResponse(code=1, msg='操作失败')
return APIResponse(code=0, msg='操作成功')
@api_view(['GET'])
def getWishThingList(request):
try:
username = request.GET.get('username', None)
if username:
user = User.objects.get(username=username)
things = user.wish_things.all()
serializer = ListThingSerializer(things, many=True)
return APIResponse(code=0, msg='操作成功', data=serializer.data)
else:
return APIResponse(code=1, msg='username不能为空')
except Exception as e:
utils.log_error(request, '操作失败' + str(e))
return APIResponse(code=1, msg='获取心愿单失败')
@api_view(['POST'])
def addCollectUser(request):
try:
username = request.GET.get('username', None)
thingId = request.GET.get('thingId', None)
if username and thingId:
user = User.objects.get(username=username)
thing = Thing.objects.get(pk=thingId)
if user not in thing.collect.all():
thing.collect.add(user)
thing.collect_count += 1
thing.save()
except Thing.DoesNotExist:
utils.log_error(request, '操作失败')
return APIResponse(code=1, msg='操作失败')
serializer = DetailThingSerializer(thing)
return APIResponse(code=0, msg='操作成功', data=serializer.data)
@api_view(['POST'])
def removeCollectUser(request):
try:
username = request.GET.get('username', None)
thingId = request.GET.get('thingId', None)
if username and thingId:
user = User.objects.get(username=username)
thing = Thing.objects.get(pk=thingId)
if user in thing.collect.all():
thing.collect.remove(user)
thing.collect_count -= 1
thing.save()
except Thing.DoesNotExist:
utils.log_error(request, '操作失败')
return APIResponse(code=1, msg='操作失败')
return APIResponse(code=0, msg='操作成功')
@api_view(['GET'])
def getCollectThingList(request):
try:
username = request.GET.get('username', None)
if username:
user = User.objects.get(username=username)
things = user.collect_things.all()
serializer = ListThingSerializer(things, many=True)
return APIResponse(code=0, msg='操作成功', data=serializer.data)
else:
return APIResponse(code=1, msg='username不能为空')
except Exception as e:
utils.log_error(request, '操作失败' + str(e))
return APIResponse(code=1, msg='获取收藏失败')
@api_view(['GET'])
def list_user_thing_api(request):
if request.method == 'GET':
user = request.GET.get("user", None)
if user:
things = Thing.objects.filter(user=user)
serializer = ListThingSerializer(things, many=True)
return APIResponse(code=0, msg='查询成功', data=serializer.data)
else:
return APIResponse(code=1, msg='user不能为空')
@api_view(['POST'])
def create(request):
data = request.data.copy()
data['status'] = '1'
serializer = ThingSerializer(data=data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='创建成功', data=serializer.data)
else:
print(serializer.errors)
utils.log_error(request, '参数错误')
return APIResponse(code=1, msg='创建失败')
@api_view(['POST'])
def update(request):
try:
pk = request.GET.get('id', -1)
thing = Thing.objects.get(pk=pk)
except Thing.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
serializer = UpdateThingSerializer(thing, data=request.data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='查询成功', data=serializer.data)
else:
print(serializer.errors)
utils.log_error(request, '参数错误')
return APIResponse(code=1, msg='更新失败')

@ -0,0 +1,162 @@
# Create your views here.
import datetime
from rest_framework.decorators import api_view, authentication_classes
from myapp import utils
from myapp.auth.authentication import TokenAuthtication
from myapp.handler import APIResponse
from myapp.models import User
from myapp.serializers import UserSerializer, LoginLogSerializer
from myapp.utils import md5value
def make_login_log(request):
try:
username = request.data['username']
data = {
"username": username,
"ip": utils.get_ip(request),
"ua": utils.get_ua(request)
}
serializer = LoginLogSerializer(data=data)
if serializer.is_valid():
serializer.save()
else:
print(serializer.errors)
except Exception as e:
print(e)
@api_view(['POST'])
def login(request):
username = request.data['username']
password = utils.md5value(request.data['password'])
users = User.objects.filter(username=username, password=password)
if len(users) > 0:
user = users[0]
if user.role in ['1', '3']:
return APIResponse(code=1, msg='该帐号为后台管理员帐号')
data = {
'username': username,
'password': password,
'token': md5value(username) # 生成令牌
}
serializer = UserSerializer(user, data=data)
if serializer.is_valid():
serializer.save()
make_login_log(request)
return APIResponse(code=0, msg='登录成功', data=serializer.data)
else:
print(serializer.errors)
return APIResponse(code=1, msg='用户名或密码错误')
@api_view(['POST'])
def register(request):
print(request.data)
username = request.data.get('username', None)
password = request.data.get('password', None)
repassword = request.data.get('repassword', None)
if not username or not password or not repassword:
return APIResponse(code=1, msg='用户名或密码不能为空')
if password != repassword:
return APIResponse(code=1, msg='密码不一致')
users = User.objects.filter(username=username)
if len(users) > 0:
return APIResponse(code=1, msg='该用户名已存在')
data = {
'username': username,
'password': password,
'role': 2, # 角色2
'status': 0,
}
data.update({'password': utils.md5value(request.data['password'])})
serializer = UserSerializer(data=data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='创建成功', data=serializer.data)
else:
print(serializer.errors)
return APIResponse(code=1, msg='创建失败')
@api_view(['GET'])
def info(request):
if request.method == 'GET':
pk = request.GET.get('id', -1)
user = User.objects.get(pk=pk)
serializer = UserSerializer(user)
return APIResponse(code=0, msg='查询成功', data=serializer.data)
@api_view(['POST'])
@authentication_classes([TokenAuthtication])
def update(request):
try:
pk = request.GET.get('id', -1)
user = User.objects.get(pk=pk)
except User.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
data = request.data.copy()
if 'username' in data.keys():
del data['username']
if 'password' in data.keys():
del data['password']
if 'role' in data.keys():
del data['role']
serializer = UserSerializer(user, data=data)
print(serializer.is_valid())
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='更新成功', data=serializer.data)
else:
print(serializer.errors)
return APIResponse(code=1, msg='更新失败')
@api_view(['POST'])
@authentication_classes([TokenAuthtication])
def updatePwd(request):
try:
pk = request.GET.get('id', -1)
user = User.objects.get(pk=pk)
except User.DoesNotExist:
return APIResponse(code=1, msg='对象不存在')
print(user.role)
if user.role != '2':
return APIResponse(code=1, msg='参数非法')
password = request.data.get('password', None)
newPassword1 = request.data.get('newPassword1', None)
newPassword2 = request.data.get('newPassword2', None)
if not password or not newPassword1 or not newPassword2:
return APIResponse(code=1, msg='不能为空')
if user.password != utils.md5value(password):
return APIResponse(code=1, msg='原密码不正确')
if newPassword1 != newPassword2:
return APIResponse(code=1, msg='两次密码不一致')
data = request.data.copy()
data.update({'password': utils.md5value(newPassword1)})
serializer = UserSerializer(user, data=data)
if serializer.is_valid():
serializer.save()
return APIResponse(code=0, msg='更新成功', data=serializer.data)
else:
print(serializer.errors)
return APIResponse(code=1, msg='更新失败')

@ -0,0 +1,6 @@
Django==3.2.11
PyMySQL==1.0.2
djangorestframework==3.13.0
django-cors-headers==3.13.0
Pillow==9.1.1
psutil==5.9.4

@ -0,0 +1,4 @@
import pymysql
pymysql.install_as_MySQLdb()
print("===============install pymysql==============")

@ -0,0 +1,16 @@
"""
ASGI config for server project.
It exposes the ASGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/4.1/howto/deployment/asgi/
"""
import os
from django.core.asgi import get_asgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'server.settings')
application = get_asgi_application()

@ -0,0 +1,150 @@
"""
Django settings for server project.
Generated by 'django-admin startproject' using Django 4.1.4.
For more information on this file, see
https://docs.djangoproject.com/en/4.1/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/4.1/ref/settings/
"""
import os
from pathlib import Path
# Build paths inside the project like this: BASE_DIR / 'subdir'.
# BASE_DIR = Path(__file__).resolve().parent.parent
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/4.1/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-sz@madp0ifx!b)^lg_g!f+5s*w7w_=sjgq-k+erzb%x42$^r!d'
# 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',
'rest_framework',
'corsheaders', # 跨域
'myapp'
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware', # 跨域配置
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'myapp.middlewares.LogMiddleware.OpLogs'
]
CORS_ORIGIN_ALLOW_ALL = True # 允许跨域
ROOT_URLCONF = 'server.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'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 = 'server.wsgi.application'
# Database
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'python_team',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': '3306',
'OPTIONS': {
"init_command": "SET foreign_key_checks = 0;",
}
}
}
# Password validation
# https://docs.djangoproject.com/en/4.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/4.1/topics/i18n/
LANGUAGE_CODE = 'zh-hans'
# 时区
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False
# 日期时间格式
DATE_FORMAT = 'Y-m-d'
DATETIME_FORMAT = 'Y-m-d H:i:s'
# 上传文件路径
# 并在urls.py配置+static
MEDIA_ROOT = os.path.join(BASE_DIR, 'upload/')
MEDIA_URL = '/upload/'
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.1/howto/static-files/
STATIC_URL = 'static/'
# Default primary key field type
# https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
# 跨域配置
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOW_ALL_ORIGINS = True
CORS_ALLOW_HEADERS = '*'

@ -0,0 +1,25 @@
"""server URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/4.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.conf.urls.static import static
from django.contrib import admin
from django.urls import path, include
from server import settings
urlpatterns = [
path('admin/', admin.site.urls),
path('myapp/', include('myapp.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

@ -0,0 +1,16 @@
"""
WSGI config for server 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/4.1/howto/deployment/wsgi/
"""
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'server.settings')
application = get_wsgi_application()

Binary file not shown.

After

Width:  |  Height:  |  Size: 784 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 784 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 901 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 784 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 388 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 784 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 784 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 901 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 388 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 784 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 901 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 784 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 784 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 784 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 784 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 901 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 901 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 784 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 784 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 784 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 234 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 292 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 234 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save