From 2e8820508adecbd995f928da02eced8b4b2fec3c Mon Sep 17 00:00:00 2001
From: Bob <1397910458@qq.com>
Date: Thu, 20 Aug 2020 22:53:57 +0800
Subject: [PATCH 1/4] #view
---
dashboard/views.py | 3 +-
polls/views.py | 86 +++++++++++++++++++++++-----------------------
2 files changed, 45 insertions(+), 44 deletions(-)
diff --git a/dashboard/views.py b/dashboard/views.py
index 3515809..f24d399 100644
--- a/dashboard/views.py
+++ b/dashboard/views.py
@@ -48,6 +48,7 @@ def user_login(request):
except CaptchaStore.DoesNotExist:
messages.error(request, '验证码错误')
return HttpResponseRedirect('/login/')
+ print(username,password)
if username is not None and password is not None:
try:
# user = authenticate(username=username, password=password)
@@ -61,7 +62,7 @@ def user_login(request):
else:
messages.error(request, '账号或密码错误,请您确认账号和密码')
except:
- messages.error(request, '账号或密码错误,请您确认账号和密码')
+ messages.error(request, '111')
return render(request,'dashboard/login.html',{'hash_key':hash_key,'image_url':image_url})
def user_logout(request):
logout(request)
diff --git a/polls/views.py b/polls/views.py
index 3b1a8ef..50a59f7 100644
--- a/polls/views.py
+++ b/polls/views.py
@@ -1,43 +1,43 @@
-from django.shortcuts import render
-from django.http import HttpResponse, JsonResponse
-from django.contrib.auth import get_user_model
-from django.views.decorators.csrf import csrf_exempt
-
-# Create your views here.
-
-
-def index(request):
- username = request.GET.get('username')
- password = request.GET.get('password')
- print(username, password)
- return JsonResponse({'status': 'error', 'message': '用户名或密码错误'})
-
-
-def status_500(request):
- return HttpResponse(status=500)
-
-
-def status_401(request):
- return HttpResponse(status=401)
-
-
-@csrf_exempt
-def polls_login(request):
- if request.method == 'POST':
- phone = request.POST.get('phone')
- password = request.POST.get('password')
- UserModel = get_user_model()
- user = UserModel.objects.filter(first_name=phone).first()
- if not user:
- return JsonResponse({'status': 'error', 'message': '用户名或密码错误'})
-
- u = authenticate(request, username=user.username, password=password)
- if u is not None:
- login(request, u)
- print(u)
- result = dict()
- return JsonResponse(result)
- else:
- return JsonResponse({'status': 'error', 'message': '用户名或密码错误'})
- else:
- return JsonResponse({})
+from django.shortcuts import render
+from django.http import HttpResponse, JsonResponse
+from django.contrib.auth import get_user_model, authenticate, login
+from django.views.decorators.csrf import csrf_exempt
+
+# Create your views here.
+
+
+def index(request):
+ username = request.GET.get('username')
+ password = request.GET.get('password')
+ print(username, password)
+ return JsonResponse({'status': 'error', 'message': '用户名或密码错误'})
+
+
+def status_500(request):
+ return HttpResponse(status=500)
+
+
+def status_401(request):
+ return HttpResponse(status=401)
+
+
+@csrf_exempt
+def polls_login(request):
+ if request.method == 'POST':
+ phone = request.POST.get('phone')
+ password = request.POST.get('password')
+ UserModel = get_user_model()
+ user = UserModel.objects.filter(first_name=phone).first()
+ if not user:
+ return JsonResponse({'status': 'error', 'message': '用户名或密码错误'})
+
+ u = authenticate(request, username=user.username, password=password)
+ if u is not None:
+ login(request, u)
+ print(u)
+ result = dict()
+ return JsonResponse(result)
+ else:
+ return JsonResponse({'status': 'error', 'message': '用户名或密码错误'})
+ else:
+ return JsonResponse({})
From 1aabd1a5c61e28201a029b08d0a184b2901b8e3c Mon Sep 17 00:00:00 2001
From: Bob <1397910458@qq.com>
Date: Sun, 23 Aug 2020 12:06:04 +0800
Subject: [PATCH 2/4] =?UTF-8?q?#=E7=94=A8=E6=88=B7=E7=99=BB=E5=BD=95?=
=?UTF-8?q?=E3=80=81=E6=95=B0=E6=8D=AE=E5=BA=93=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
NewMediaMonitoring/settings.py | 306 +-
dashboard/models.py | 716 +-
.../templates/dashboard/base/header.html | 764 +-
dashboard/templates/dashboard/base/left.html | 382 +-
dashboard/templates/dashboard/index.html | 1110 +--
dashboard/templates/dashboard/login.html | 298 +-
dashboard/templates/dashboard/register.html | 376 +-
dashboard/views.py | 30 +-
.../management/user-management-update.html | 119 +
.../templates/management/user-management.html | 160 +-
management/urls.py | 95 +-
management/views.py | 1773 ++--
.../upload/cover/20181201110659913.PNG | Bin
.../cover/20181201110659913_85e25PV.PNG | Bin
.../cover/20181201110659913_ie84dq3.PNG | Bin
{static => media}/upload/cover/weibo.png | Bin
{static => media}/upload/cover/weixin.png | Bin
.../upload/cover/weixin_T3Y4A36.png | Bin
.../upload/cover/weixin_TC0D6fQ.png | Bin
.../upload/cover/微信图片_20200724112643.jpg | Bin
.../cover/微信图片_20200724112643_deab8x0.jpg | Bin
.../upload/groupimage/20181201110659913.PNG | Bin
.../groupimage/微信图片_20200724112643.jpg | Bin
.../upload/profile/20181201110659913.PNG | Bin
.../profile/微信图片_20200724112643.jpg | Bin
.../微信图片_20200724112643_4e2NSOO.jpg | Bin 0 -> 23938 bytes
.../微信图片_20200724112643_6VlW7BD.jpg | Bin 0 -> 23938 bytes
.../微信图片_20200724112643_CkX05Bp.jpg | Bin 0 -> 23938 bytes
.../微信图片_20200724112643_Umb7HT3.jpg | Bin 0 -> 23938 bytes
.../微信图片_20200724112643_pakJc7t.jpg | Bin 0 -> 23938 bytes
{static => media}/upload/qita.png | Bin
{static => media}/upload/toutiao.png | Bin
{static => media}/upload/weibo.png | Bin
{static => media}/upload/weixin.png | Bin
static/js/scripts.js | 7276 ++++++++---------
static/media/cover/20181201110659913.PNG | Bin 0 -> 38731 bytes
.../media/cover/20181201110659913_85e25PV.PNG | Bin 0 -> 38731 bytes
.../media/cover/20181201110659913_ie84dq3.PNG | Bin 0 -> 38731 bytes
static/media/cover/weibo.png | Bin 0 -> 7699 bytes
static/media/cover/weixin.png | Bin 0 -> 7561 bytes
static/media/cover/weixin_T3Y4A36.png | Bin 0 -> 7561 bytes
static/media/cover/weixin_TC0D6fQ.png | Bin 0 -> 7561 bytes
.../media/cover/微信图片_20200724112643.jpg | Bin 0 -> 23938 bytes
.../cover/微信图片_20200724112643_deab8x0.jpg | Bin 0 -> 23938 bytes
static/media/groupimage/20181201110659913.PNG | Bin 0 -> 38731 bytes
.../groupimage/微信图片_20200724112643.jpg | Bin 0 -> 23938 bytes
static/media/profile/20181201110659913.PNG | Bin 0 -> 38731 bytes
.../media/profile/微信图片_20200724112643.jpg | Bin 0 -> 23938 bytes
static/media/qita.png | Bin 0 -> 12336 bytes
static/media/toutiao.png | Bin 0 -> 8883 bytes
static/media/weibo.png | Bin 0 -> 7699 bytes
static/media/weixin.png | Bin 0 -> 7561 bytes
52 files changed, 6798 insertions(+), 6607 deletions(-)
create mode 100644 management/templates/management/user-management-update.html
rename {static => media}/upload/cover/20181201110659913.PNG (100%)
rename {static => media}/upload/cover/20181201110659913_85e25PV.PNG (100%)
rename {static => media}/upload/cover/20181201110659913_ie84dq3.PNG (100%)
rename {static => media}/upload/cover/weibo.png (100%)
rename {static => media}/upload/cover/weixin.png (100%)
rename {static => media}/upload/cover/weixin_T3Y4A36.png (100%)
rename {static => media}/upload/cover/weixin_TC0D6fQ.png (100%)
rename {static => media}/upload/cover/微信图片_20200724112643.jpg (100%)
rename {static => media}/upload/cover/微信图片_20200724112643_deab8x0.jpg (100%)
rename {static => media}/upload/groupimage/20181201110659913.PNG (100%)
rename {static => media}/upload/groupimage/微信图片_20200724112643.jpg (100%)
rename {static => media}/upload/profile/20181201110659913.PNG (100%)
rename {static => media}/upload/profile/微信图片_20200724112643.jpg (100%)
create mode 100644 media/upload/profile/微信图片_20200724112643_4e2NSOO.jpg
create mode 100644 media/upload/profile/微信图片_20200724112643_6VlW7BD.jpg
create mode 100644 media/upload/profile/微信图片_20200724112643_CkX05Bp.jpg
create mode 100644 media/upload/profile/微信图片_20200724112643_Umb7HT3.jpg
create mode 100644 media/upload/profile/微信图片_20200724112643_pakJc7t.jpg
rename {static => media}/upload/qita.png (100%)
rename {static => media}/upload/toutiao.png (100%)
rename {static => media}/upload/weibo.png (100%)
rename {static => media}/upload/weixin.png (100%)
create mode 100644 static/media/cover/20181201110659913.PNG
create mode 100644 static/media/cover/20181201110659913_85e25PV.PNG
create mode 100644 static/media/cover/20181201110659913_ie84dq3.PNG
create mode 100644 static/media/cover/weibo.png
create mode 100644 static/media/cover/weixin.png
create mode 100644 static/media/cover/weixin_T3Y4A36.png
create mode 100644 static/media/cover/weixin_TC0D6fQ.png
create mode 100644 static/media/cover/微信图片_20200724112643.jpg
create mode 100644 static/media/cover/微信图片_20200724112643_deab8x0.jpg
create mode 100644 static/media/groupimage/20181201110659913.PNG
create mode 100644 static/media/groupimage/微信图片_20200724112643.jpg
create mode 100644 static/media/profile/20181201110659913.PNG
create mode 100644 static/media/profile/微信图片_20200724112643.jpg
create mode 100644 static/media/qita.png
create mode 100644 static/media/toutiao.png
create mode 100644 static/media/weibo.png
create mode 100644 static/media/weixin.png
diff --git a/NewMediaMonitoring/settings.py b/NewMediaMonitoring/settings.py
index b45e0ea..9eb84b5 100644
--- a/NewMediaMonitoring/settings.py
+++ b/NewMediaMonitoring/settings.py
@@ -1,153 +1,153 @@
-"""
-Django settings for NewMediaMonitoring project.
-
-Generated by 'django-admin startproject' using Django 2.1.8.
-
-For more information on this file, see
-https://docs.djangoproject.com/en/2.1/topics/settings/
-
-For the full list of settings and their values, see
-https://docs.djangoproject.com/en/2.1/ref/settings/
-"""
-
-import os
-
-# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
-import sys
-
-BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
-
-# Quick-start development settings - unsuitable for production
-# See https://docs.djangoproject.com/en/2.1/howto/deployment/checklist/
-
-# SECURITY WARNING: keep the secret key used in production secret!
-SECRET_KEY = 'tj5m7-ns_6x_fvn2^q+7+2fopq!#7taqv!9ai(c_45i5!%m=*z'
-
-# 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',
- 'django_token',
- 'corsheaders',
- 'bootstrap3',
- 'captcha',
- 'dashboard',
- 'management'
-]
-
-MIDDLEWARE = [
- 'django.middleware.security.SecurityMiddleware',
- 'django.middleware.locale.LocaleMiddleware',
- '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',
- 'django_token.middleware.TokenMiddleware',
-]
-
-ROOT_URLCONF = 'NewMediaMonitoring.urls'
-
-TEMPLATES = [
- {
- 'BACKEND': 'django.template.backends.django.DjangoTemplates',
- 'DIRS': [os.path.join(BASE_DIR, 'templates')],
- 'APP_DIRS': True,
- 'OPTIONS': {
- 'context_processors': [
- 'django.template.context_processors.debug',
- 'django.template.context_processors.request',
- 'django.contrib.auth.context_processors.auth',
- 'django.contrib.messages.context_processors.messages',
- ],
- },
- },
-]
-
-WSGI_APPLICATION = 'NewMediaMonitoring.wsgi.application'
-
-# Database
-# https://docs.djangoproject.com/en/2.1/ref/settings/#databases
-
-DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.postgresql_psycopg2',
- 'NAME': 'newmediaDB1',
- 'USER': 'newmedia',
- 'PASSWORD': 'newmedia2020!@#',
- 'HOST': '210.77.68.250',
- 'PORT': '5432',
- }
-}
-
-# Password validation
-# https://docs.djangoproject.com/en/2.1/ref/settings/#auth-password-validators
-
-AUTH_PASSWORD_VALIDATORS = [
- {
- 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
- },
- {
- 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
- },
- {
- 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
- },
- {
- 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
- },
-]
-
-AUTHENTICATION_BACKENDS = (
- 'django.contrib.auth.backends.ModelBackend',
- 'django_token.backends.TokenBackend'
-)
-
-# Internationalization
-# https://docs.djangoproject.com/en/2.1/topics/i18n/
-
-LANGUAGE_CODE = 'zh-Hans'
-
-TIME_ZONE = 'Asia/Shanghai'
-
-USE_I18N = True
-
-USE_L10N = True
-
-USE_TZ = False
-
-# Static files (CSS, JavaScript, Images)
-# https://docs.djangoproject.com/en/2.1/howto/static-files/
-
-STATIC_URL = '/static/'
-STATICFILES_DIRS = [
- os.path.join(BASE_DIR, "static"),
-]
-STATIC_ROOT = '/var/www/p3/newmediamonitoring/static/'
-MEDIA_URL = '/media/'
-MEDIA_ROOT = '/var/www/p3/newmediamonitoring/media/'
-
-"""用户模块扩展部分"""
-AUTH_PROFILE_MODULE = 'djangoadmin.myadmin.UserProfile'
-"""用户模块扩展完成"""
-
-CORS_ORIGIN_ALLOW_ALL = True
-
-CORS_URLS_REGEX = r'^/polls/.*$'
-
-try:
- from .local_settings import *
-except ImportError as e:
- pass
+"""
+Django settings for NewMediaMonitoring project.
+
+Generated by 'django-admin startproject' using Django 2.1.8.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/2.1/topics/settings/
+
+For the full list of settings and their values, see
+https://docs.djangoproject.com/en/2.1/ref/settings/
+"""
+
+import os
+
+# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
+import sys
+
+BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+
+# Quick-start development settings - unsuitable for production
+# See https://docs.djangoproject.com/en/2.1/howto/deployment/checklist/
+
+# SECURITY WARNING: keep the secret key used in production secret!
+SECRET_KEY = 'tj5m7-ns_6x_fvn2^q+7+2fopq!#7taqv!9ai(c_45i5!%m=*z'
+
+# 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',
+ 'django_token',
+ 'corsheaders',
+ 'bootstrap3',
+ 'captcha',
+ 'dashboard',
+ 'management'
+]
+
+MIDDLEWARE = [
+ 'django.middleware.security.SecurityMiddleware',
+ 'django.middleware.locale.LocaleMiddleware',
+ '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',
+ 'django_token.middleware.TokenMiddleware',
+]
+
+ROOT_URLCONF = 'NewMediaMonitoring.urls'
+
+TEMPLATES = [
+ {
+ 'BACKEND': 'django.template.backends.django.DjangoTemplates',
+ 'DIRS': [os.path.join(BASE_DIR, 'templates')],
+ 'APP_DIRS': True,
+ 'OPTIONS': {
+ 'context_processors': [
+ 'django.template.context_processors.debug',
+ 'django.template.context_processors.request',
+ 'django.contrib.auth.context_processors.auth',
+ 'django.contrib.messages.context_processors.messages',
+ ],
+ },
+ },
+]
+
+WSGI_APPLICATION = 'NewMediaMonitoring.wsgi.application'
+
+# Database
+# https://docs.djangoproject.com/en/2.1/ref/settings/#databases
+
+DATABASES = {
+ 'default': {
+ 'ENGINE': 'django.db.backends.postgresql_psycopg2',
+ 'NAME': 'newmediaDB1',
+ 'USER': 'newmedia',
+ 'PASSWORD': 'newmedia2020!@#',
+ 'HOST': '210.77.68.250',
+ 'PORT': '5432',
+ }
+}
+
+# Password validation
+# https://docs.djangoproject.com/en/2.1/ref/settings/#auth-password-validators
+
+AUTH_PASSWORD_VALIDATORS = [
+ {
+ 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
+ },
+ {
+ 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
+ },
+ {
+ 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
+ },
+ {
+ 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
+ },
+]
+
+AUTHENTICATION_BACKENDS = (
+ 'django.contrib.auth.backends.ModelBackend',
+ 'django_token.backends.TokenBackend'
+)
+
+# Internationalization
+# https://docs.djangoproject.com/en/2.1/topics/i18n/
+
+LANGUAGE_CODE = 'zh-Hans'
+
+TIME_ZONE = 'Asia/Shanghai'
+
+USE_I18N = True
+
+USE_L10N = True
+
+USE_TZ = False
+
+# Static files (CSS, JavaScript, Images)
+# https://docs.djangoproject.com/en/2.1/howto/static-files/
+
+STATIC_URL = '/static/'
+STATICFILES_DIRS = [
+ os.path.join(BASE_DIR, "static"),
+]
+STATIC_ROOT = '/var/www/p3/newmediamonitoring/static/'
+MEDIA_URL = '/static/media/'
+MEDIA_ROOT = '/var/www/p3/newmediamonitoring/media/'
+
+"""用户模块扩展部分"""
+AUTH_PROFILE_MODULE = 'djangoadmin.myadmin.UserProfile'
+"""用户模块扩展完成"""
+
+CORS_ORIGIN_ALLOW_ALL = True
+
+CORS_URLS_REGEX = r'^/polls/.*$'
+
+try:
+ from .local_settings import *
+except ImportError as e:
+ pass
diff --git a/dashboard/models.py b/dashboard/models.py
index de100e8..5672aa1 100644
--- a/dashboard/models.py
+++ b/dashboard/models.py
@@ -1,357 +1,359 @@
-import uuid
-
-from django.contrib.auth.models import User
-from django.db import models
-
-
-# Create your models here.
-class Group_type(models.Model):
- id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
- type = models.CharField('群组类型',max_length=256,null=True,blank=True)
-
- def __str__(self):
- return self.type
-# 群组
-class Group(models.Model):
- GROUP_STATUS_CHOICES = (
- ('0','关闭'),
- ('1','开启')
- )
- id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
- name = models.CharField('群组名称', max_length=256, null=True, blank=True)
- presentation = models.TextField('群组描述', null=True, blank=True)
- image = models.FileField(upload_to='groupimage', null=True, blank=True)
- type = models.ForeignKey(Group_type,on_delete=models.CASCADE,null=True,blank=True)
- status = models.CharField('状态',max_length=256,null=True,blank=True,choices=GROUP_STATUS_CHOICES)
- province = models.CharField('省', max_length=256, null=True, blank=True)
- cities = models.CharField('市', max_length=256, null=True, blank=True)
- district = models.CharField('县', max_length=256, null=True, blank=True)
- town = models.CharField('乡', max_length=256, null=True, blank=True)
- village = models.CharField('村', max_length=256, null=True, blank=True)
-
- created = models.DateTimeField('创建时间', auto_now_add=True)
- updated = models.DateTimeField('更新时间', auto_now=True)
-
- def __str__(self):
- return self.name
-
-#群组管理员
-class Group_admin(models.Model):
- id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
- user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
- group = models.ForeignKey(Group, on_delete=models.CASCADE, null=True, blank=True)
- created = models.DateTimeField('创建时间', auto_now_add=True)
- updated = models.DateTimeField('更新时间', auto_now=True)
-
- def __str__(self):
- return self.group.name
-#群组成员
-class Group_user(models.Model):
- id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
- user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
- group = models.ForeignKey(Group, on_delete=models.CASCADE, null=True, blank=True)
- created = models.DateTimeField('创建时间', auto_now_add=True)
- updated = models.DateTimeField('更新时间', auto_now=True)
-
- def __str__(self):
- return self.user.username
-# 权限等级
-class Level(models.Model):
- id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
- name = models.CharField('等级名', max_length=256, null=True, blank=True)
- level = models.IntegerField('级别', blank=True, null=True,default=0)
- created = models.DateTimeField('创建时间', auto_now_add=True)
- updated = models.DateTimeField('更新时间', auto_now=True)
-
-
- def __str__(self):
- return self.name
-#单位类型
-class Organizationtype(models.Model):
- id = models.UUIDField('id',primary_key=True,default=uuid.uuid4)
- organizationtype = models.CharField('单位类型',blank=True,null=True,max_length=256)
- created = models.DateTimeField('创建时间', auto_now_add=True)
- updated = models.DateTimeField('更新时间', auto_now=True)
-
- def __str__(self):
- return self.organizationtype
-
-
-# 单位
-class Organization(models.Model):
- id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
- name = models.CharField('单位名', max_length=256, null=True, blank=True)
- image = models.FileField(upload_to='cover', null=True, blank=True)
- organizationtype = models.ForeignKey(Organizationtype,on_delete=models.CASCADE, null=True, blank=True)
- province = models.CharField('省',max_length=256,null=True,blank=True)
- cities = models.CharField('市',max_length=256,null=True,blank=True)
- district = models.CharField('县',max_length=256,null=True,blank=True)
- town = models.CharField('乡',max_length=256,null=True,blank=True)
- village = models.CharField('村',max_length=256,null=True,blank=True)
- # group = models.ForeignKey(Group, on_delete=models.CASCADE, null=True, blank=True)
- # level = models.ForeignKey(Level,on_delete=models.CASCADE,null=True,blank=True)
- created = models.DateTimeField('创建时间', auto_now_add=True)
- updated = models.DateTimeField('更新时间', auto_now=True)
-
- def __str__(self):
- return self.name
-
-
-# 扩展用户表
-class Userprofile(models.Model):
- user = models.ForeignKey(User, on_delete=models.CASCADE)
- name = models.CharField('姓名', null=True, blank=True, max_length=256)
- sex = models.CharField('性别', null=True, blank=True, max_length=256)
- image = models.FileField(upload_to='profile', null=True, blank=True)
- organization = models.ForeignKey(Organization, on_delete=models.CASCADE, null=True, blank=True)
-
-
- def __str__(self):
- return self.user.username
-
-
-def create_user_profile(sender, instance, created, **kwargs):
- """Create the UserProfile when a new User is saved"""
- if created:
- profile = Userprofile()
- profile.user = instance
- profile.save()
-
-
-# 微信公众号
-class Weixin(models.Model):
- WEIXIN_STATUS_CHOICES = (
- ('1', '开启'),
- ('0', '关闭')
- )
- id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
- code = models.CharField('微信公众号', max_length=256, null=True, blank=True)
- weixinid = models.CharField('微信ID',max_length=256,null=True,blank=True)
- alias = models.CharField('别名',max_length=256,null=True,blank=True)
- image = models.FileField(upload_to='cover', null=True, blank=True)
- organization = models.ForeignKey(Organization, on_delete=models.CASCADE, null=True, blank=True)
- status = models.CharField('状态',max_length=256,null=True,blank=True,choices=WEIXIN_STATUS_CHOICES)
- created = models.DateTimeField('创建时间', auto_now_add=True)
- updated = models.DateTimeField('更新时间', auto_now=True)
-
- def __str__(self):
- return self.code
-
-
-# 微信文章采集
-class Weixin_data(models.Model):
- id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
- title = models.CharField('文章标题', max_length=256, null=True, blank=True)
- site = models.CharField('位置', max_length=256, null=True, blank=True)
- date = models.CharField('发文时间', max_length=256, null=True, blank=True)
- original = models.BooleanField('是否原创', null=True, blank=True)
- url = models.CharField('文章链接', max_length=256, null=True, blank=True)
- author = models.CharField('作者', max_length=256, null=True, blank=True)
- comment = models.CharField('评论数', max_length=256, null=True, blank=True)
- reply = models.CharField('作者回复数', max_length=256, null=True, blank=True)
- content = models.TextField('正文', null=True, blank=True)
- weixin = models.ForeignKey(Weixin, on_delete=models.CASCADE, null=True, blank=True)
- created = models.DateTimeField('创建时间', auto_now_add=True)
- updated = models.DateTimeField('更新时间', auto_now=True)
-
- def __str__(self):
- return self.title
-
-
-# 微信评论
-class Weixin_comment(models.Model):
- id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
- comment = models.TextField('评论', null=True, blank=True)
- user = models.CharField('用户', max_length=256, null=True, blank=True)
- reply = models.TextField('回复', null=True, blank=True)
- weixin = models.ForeignKey(Weixin, on_delete=models.CASCADE, null=True, blank=True)
- created = models.DateTimeField('创建时间', auto_now_add=True)
- updated = models.DateTimeField('更新时间', auto_now=True)
-
- def __str__(self):
- return self.user
-
-
-# 微信错别字
-class Weixin_Wrong(models.Model):
- id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
- wrong = models.CharField('错别字', max_length=256, null=True, blank=True)
- idea = models.CharField('建议', max_length=256, null=True, blank=True)
- site = models.CharField('位置', max_length=256, null=True, blank=True)
- weixin = models.ForeignKey(Weixin, on_delete=models.CASCADE, null=True, blank=True)
- change = models.BooleanField('是否已修改', null=True, blank=True)
- created = models.DateTimeField('创建时间', auto_now_add=True)
- updated = models.DateTimeField('更新时间', auto_now=True)
-
- def __str__(self):
- return self.wrong
-
-
-# 微博
-class Weibo(models.Model):
- WEIBO_STATUS_CHOICES = (
- ('1', '开启'),
- ('0', '关闭')
- )
- id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
- code = models.CharField('微博号', max_length=256, null=True, blank=True)
- weiboid = models.CharField('微博ID', max_length=256, null=True, blank=True)
- alias = models.CharField('别名', max_length=256, null=True, blank=True)
- image = models.FileField(upload_to='cover', null=True, blank=True)
- organization = models.ForeignKey(Organization, on_delete=models.CASCADE, null=True, blank=True)
- status = models.CharField('状态', max_length=256, null=True, blank=True, choices=WEIBO_STATUS_CHOICES)
- created = models.DateTimeField('创建时间', auto_now_add=True)
- updated = models.DateTimeField('更新时间', auto_now=True)
-
- def __str__(self):
- return self.code
-
-
-# 微博文章采集
-class Weibi_data(models.Model):
- id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
- weiboid = models.CharField('微博ID', max_length=256, null=True, blank=True)
- content = models.TextField('正文', null=True, blank=True)
- url = models.CharField('文章url', max_length=256, null=True, blank=True)
- originalimageurl = models.CharField('原始图片url', max_length=256, null=True, blank=True)
- transpondimageurl = models.CharField('转发图片url', max_length=256, null=True, blank=True)
- original = models.BooleanField('是否原创', null=True, blank=True)
- site = models.CharField('发布位置', max_length=256, null=True, blank=True)
- date = models.CharField('发布时间', max_length=256, null=True, blank=True)
- tool = models.CharField('发布工具', max_length=256, null=True, blank=True)
- like = models.CharField('点赞数', max_length=256, null=True, blank=True)
- transpond = models.CharField('转发数', max_length=256, null=True, blank=True)
- comment = models.CharField('评论数', max_length=256, null=True, blank=True)
- title = models.CharField('文章标题', max_length=256, null=True, blank=True)
- weibo = models.ForeignKey(Weibo, on_delete=models.CASCADE, null=True, blank=True)
- created = models.DateTimeField('创建时间', auto_now_add=True)
- updated = models.DateTimeField('更新时间', auto_now=True)
-
- def __str__(self):
- return self.title
-
-
-# 微博错别字
-class Weibo_Wrong(models.Model):
- id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
- wrong = models.CharField('错别字', max_length=256, null=True, blank=True)
- idea = models.CharField('建议', max_length=256, null=True, blank=True)
- site = models.CharField('位置', max_length=256, null=True, blank=True)
- weibo = models.ForeignKey(Weibo, on_delete=models.CASCADE, null=True, blank=True)
- change = models.BooleanField('是否已修改', null=True, blank=True)
- created = models.DateTimeField('创建时间', auto_now_add=True)
- updated = models.DateTimeField('更新时间', auto_now=True)
-
-
-# 今日头条
-class Toutiao(models.Model):
- TOUTIAO_STATUS_CHOICES = (
- ('1', '开启'),
- ('0', '关闭')
- )
- id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
- code = models.CharField('头条号', max_length=256, null=True, blank=True)
- toutiaoid = models.CharField('头条ID', max_length=256, null=True, blank=True)
- alias = models.CharField('别名', max_length=256, null=True, blank=True)
- image = models.FileField(upload_to='cover', null=True, blank=True)
- organization = models.ForeignKey(Organization, on_delete=models.CASCADE, null=True, blank=True)
- status = models.CharField('状态', max_length=256, null=True, blank=True, choices=TOUTIAO_STATUS_CHOICES)
- created = models.DateTimeField('创建时间', auto_now_add=True)
- updated = models.DateTimeField('更新时间', auto_now=True)
-
- def __str__(self):
- return self.code
-
-
-# 今日头条数据
-class Toutiao_data(models.Model):
- id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
- title = models.CharField('标题', max_length=256, null=True, blank=True)
- url = models.CharField('链接', max_length=256, null=True, blank=True)
- img = models.CharField('缩略图', max_length=256, null=True, blank=True)
- count = models.CharField('阅读数', max_length=256, null=True, blank=True)
- commentcount = models.CharField('评论数', max_length=256, null=True, blank=True)
- reply = models.CharField('作者回复数', max_length=256, null=True, blank=True)
- date = models.CharField('时间', max_length=256, null=True, blank=True)
- content = models.TextField('正文', null=True, blank=True)
- comment = models.TextField('评论', null=True, blank=True)
- toutiao = models.ForeignKey(Toutiao, on_delete=models.CASCADE, null=True, blank=True)
- created = models.DateTimeField('创建时间', auto_now_add=True)
- updated = models.DateTimeField('更新时间', auto_now=True)
-
- def __str__(self):
- return self.title
-
-
-# 今日头条评论
-class Toutiao_comment(models.Model):
- id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
- comment = models.TextField('评论', null=True, blank=True)
- user = models.CharField('用户', max_length=256, null=True, blank=True)
- reply = models.TextField('回复', null=True, blank=True)
- toutiao = models.ForeignKey(Toutiao, on_delete=models.CASCADE, null=True, blank=True)
- created = models.DateTimeField('创建时间', auto_now_add=True)
- updated = models.DateTimeField('更新时间', auto_now=True)
-
- def __str__(self):
- return self.user
-
-
-# 今日头条错别字
-class Toutiao_Wrong(models.Model):
- id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
- wrong = models.CharField('错别字', max_length=256, null=True, blank=True)
- idea = models.CharField('建议', max_length=256, null=True, blank=True)
- site = models.CharField('位置', max_length=256, null=True, blank=True)
- toutiao = models.ForeignKey(Toutiao, on_delete=models.CASCADE, null=True, blank=True)
- change = models.BooleanField('是否已修改', null=True, blank=True)
- created = models.DateTimeField('创建时间', auto_now_add=True)
- updated = models.DateTimeField('更新时间', auto_now=True)
-
- def __str__(self):
- return self.wrong
-
-
-# 其他新媒体
-class Qita(models.Model):
- QITA_STATUS_CHOICES = (
- ('1', '开启'),
- ('0', '关闭')
- )
- id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
- type = models.CharField('新媒体类型', max_length=256, null=True, blank=True)
- name = models.CharField('新媒体名称', max_length=256, null=True, blank=True)
- qitaid = models.CharField('新媒体ID', max_length=256, null=True, blank=True)
- alias = models.CharField('别名', max_length=256, null=True, blank=True)
- image = models.FileField(upload_to='cover', null=True, blank=True)
- organization = models.ForeignKey(Organization, on_delete=models.CASCADE, null=True, blank=True)
- status = models.CharField('状态', max_length=256, null=True, blank=True, choices=QITA_STATUS_CHOICES)
- created = models.DateTimeField('创建时间', auto_now_add=True)
- updated = models.DateTimeField('更新时间', auto_now=True)
-
- def __str__(self):
- return self.name
-
-#其他新媒体监测
-class Qita_jc(models.Model):
- id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
- mewnedia = models.ForeignKey(Qita,on_delete=models.CASCADE)
- count = models.CharField('总发文量', max_length=256, null=True, blank=True)
- count_jc = models.CharField('监测时间内发文量', max_length=256, null=True, blank=True)
- comment = models.CharField('评论数', max_length=256, null=True, blank=True)
- reply = models.CharField('作者回复数', max_length=256, null=True, blank=True)
- date = models.CharField('最近发文日期', max_length=256, null=True, blank=True)
- created = models.DateTimeField('创建时间', auto_now_add=True)
- updated = models.DateTimeField('更新时间', auto_now=True)
-
- def __str__(self):
- return self.mewnedia.name
-#5级地名库
-class Area_code_2020(models.Model):
- code = models.CharField('区划代码',max_length=256,null=True,blank=True)
- name = models.CharField('名称',max_length=256,null=True,blank=True)
- level = models.CharField('级别1-5,省市县镇村',max_length=256,null=True,blank=True)
- pcode = models.CharField('父级区划代码',max_length=256,null=True,blank=True)
-
- def __str__(self):
- return self.name
+import uuid
+
+from django.contrib.auth.models import User
+from django.db import models
+
+# 权限等级
+class Level(models.Model):
+ id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
+ name = models.CharField('等级名', max_length=256, null=True, blank=True)
+ level = models.IntegerField('级别', blank=True, null=True,default=0)
+ created = models.DateTimeField('创建时间', auto_now_add=True)
+ updated = models.DateTimeField('更新时间', auto_now=True)
+
+
+ def __str__(self):
+ return self.name
+# Create your models here.
+class Group_type(models.Model):
+ id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
+ type = models.CharField('群组类型',max_length=256,null=True,blank=True)
+
+ def __str__(self):
+ return self.type
+# 群组
+class Group(models.Model):
+ GROUP_STATUS_CHOICES = (
+ ('0','关闭'),
+ ('1','开启')
+ )
+ id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
+ name = models.CharField('群组名称', max_length=256, null=True, blank=True)
+ presentation = models.TextField('群组描述', null=True, blank=True)
+ image = models.FileField(upload_to='groupimage', null=True, blank=True)
+ type = models.ForeignKey(Group_type,on_delete=models.CASCADE,null=True,blank=True)
+ status = models.CharField('状态',max_length=256,null=True,blank=True,choices=GROUP_STATUS_CHOICES)
+ province = models.CharField('省', max_length=256, null=True, blank=True)
+ cities = models.CharField('市', max_length=256, null=True, blank=True)
+ district = models.CharField('县', max_length=256, null=True, blank=True)
+ town = models.CharField('乡', max_length=256, null=True, blank=True)
+ village = models.CharField('村', max_length=256, null=True, blank=True)
+
+ created = models.DateTimeField('创建时间', auto_now_add=True)
+ updated = models.DateTimeField('更新时间', auto_now=True)
+
+ def __str__(self):
+ return self.name
+
+#群组管理员
+class Group_admin(models.Model):
+ id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
+ user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
+ group = models.ForeignKey(Group, on_delete=models.CASCADE, null=True, blank=True)
+ created = models.DateTimeField('创建时间', auto_now_add=True)
+ updated = models.DateTimeField('更新时间', auto_now=True)
+
+ def __str__(self):
+ return self.group.name
+#群组成员
+class Group_user(models.Model):
+ id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
+ user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
+ group = models.ForeignKey(Group, on_delete=models.CASCADE, null=True, blank=True)
+ created = models.DateTimeField('创建时间', auto_now_add=True)
+ updated = models.DateTimeField('更新时间', auto_now=True)
+
+ def __str__(self):
+ return self.user.username
+
+#单位类型
+class Organizationtype(models.Model):
+ id = models.UUIDField('id',primary_key=True,default=uuid.uuid4)
+ organizationtype = models.CharField('单位类型',blank=True,null=True,max_length=256)
+ created = models.DateTimeField('创建时间', auto_now_add=True)
+ updated = models.DateTimeField('更新时间', auto_now=True)
+
+ def __str__(self):
+ return self.organizationtype
+
+
+# 单位
+class Organization(models.Model):
+ id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
+ name = models.CharField('单位名', max_length=256, null=True, blank=True)
+ image = models.FileField(upload_to='cover', null=True, blank=True)
+ organizationtype = models.ForeignKey(Organizationtype,on_delete=models.CASCADE, null=True, blank=True)
+ province = models.CharField('省',max_length=256,null=True,blank=True)
+ cities = models.CharField('市',max_length=256,null=True,blank=True)
+ district = models.CharField('县',max_length=256,null=True,blank=True)
+ town = models.CharField('乡',max_length=256,null=True,blank=True)
+ village = models.CharField('村',max_length=256,null=True,blank=True)
+ # group = models.ForeignKey(Group, on_delete=models.CASCADE, null=True, blank=True)
+ # level = models.ForeignKey(Level,on_delete=models.CASCADE,null=True,blank=True)
+ created = models.DateTimeField('创建时间', auto_now_add=True)
+ updated = models.DateTimeField('更新时间', auto_now=True)
+
+ def __str__(self):
+ return self.name
+
+
+# 扩展用户表
+class Userprofile(models.Model):
+ user = models.ForeignKey(User, on_delete=models.CASCADE)
+ name = models.CharField('姓名', null=True, blank=True, max_length=256)
+ sex = models.CharField('性别', null=True, blank=True, max_length=256)
+ image = models.FileField(upload_to='profile', null=True, blank=True)
+ organization = models.ForeignKey(Organization, on_delete=models.CASCADE, null=True, blank=True)
+ #用户状态:注册进来默认为0,为未审核状态,审核后status=1
+ status = models.IntegerField('用户状态',null=True,blank=True,default=0)
+
+
+ def __str__(self):
+ return self.user.username
+
+
+def create_user_profile(sender, instance, created, **kwargs):
+ """Create the UserProfile when a new User is saved"""
+ if created:
+ profile = Userprofile()
+ profile.user = instance
+ profile.save()
+
+
+# 微信公众号
+class Weixin(models.Model):
+ WEIXIN_STATUS_CHOICES = (
+ ('1', '开启'),
+ ('0', '关闭')
+ )
+ id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
+ code = models.CharField('微信公众号', max_length=256, null=True, blank=True)
+ weixinid = models.CharField('微信ID',max_length=256,null=True,blank=True)
+ alias = models.CharField('别名',max_length=256,null=True,blank=True)
+ image = models.FileField(upload_to='cover', null=True, blank=True)
+ organization = models.ForeignKey(Organization, on_delete=models.CASCADE, null=True, blank=True)
+ status = models.CharField('状态',max_length=256,null=True,blank=True,choices=WEIXIN_STATUS_CHOICES)
+ created = models.DateTimeField('创建时间', auto_now_add=True)
+ updated = models.DateTimeField('更新时间', auto_now=True)
+
+ def __str__(self):
+ return self.code
+
+
+# 微信文章采集
+class Weixin_data(models.Model):
+ id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
+ title = models.CharField('文章标题', max_length=256, null=True, blank=True)
+ site = models.CharField('位置', max_length=256, null=True, blank=True)
+ date = models.CharField('发文时间', max_length=256, null=True, blank=True)
+ original = models.BooleanField('是否原创', null=True, blank=True)
+ url = models.CharField('文章链接', max_length=256, null=True, blank=True)
+ author = models.CharField('作者', max_length=256, null=True, blank=True)
+ comment = models.CharField('评论数', max_length=256, null=True, blank=True)
+ reply = models.CharField('作者回复数', max_length=256, null=True, blank=True)
+ content = models.TextField('正文', null=True, blank=True)
+ weixin = models.ForeignKey(Weixin, on_delete=models.CASCADE, null=True, blank=True)
+ created = models.DateTimeField('创建时间', auto_now_add=True)
+ updated = models.DateTimeField('更新时间', auto_now=True)
+
+ def __str__(self):
+ return self.title
+
+
+# 微信评论
+class Weixin_comment(models.Model):
+ id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
+ comment = models.TextField('评论', null=True, blank=True)
+ user = models.CharField('用户', max_length=256, null=True, blank=True)
+ reply = models.TextField('回复', null=True, blank=True)
+ weixin = models.ForeignKey(Weixin, on_delete=models.CASCADE, null=True, blank=True)
+ created = models.DateTimeField('创建时间', auto_now_add=True)
+ updated = models.DateTimeField('更新时间', auto_now=True)
+
+ def __str__(self):
+ return self.user
+
+
+# 微信错别字
+class Weixin_Wrong(models.Model):
+ id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
+ wrong = models.CharField('错别字', max_length=256, null=True, blank=True)
+ idea = models.CharField('建议', max_length=256, null=True, blank=True)
+ site = models.CharField('位置', max_length=256, null=True, blank=True)
+ weixin = models.ForeignKey(Weixin, on_delete=models.CASCADE, null=True, blank=True)
+ change = models.BooleanField('是否已修改', null=True, blank=True)
+ created = models.DateTimeField('创建时间', auto_now_add=True)
+ updated = models.DateTimeField('更新时间', auto_now=True)
+
+ def __str__(self):
+ return self.wrong
+
+
+# 微博
+class Weibo(models.Model):
+ WEIBO_STATUS_CHOICES = (
+ ('1', '开启'),
+ ('0', '关闭')
+ )
+ id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
+ code = models.CharField('微博号', max_length=256, null=True, blank=True)
+ weiboid = models.CharField('微博ID', max_length=256, null=True, blank=True)
+ alias = models.CharField('别名', max_length=256, null=True, blank=True)
+ image = models.FileField(upload_to='cover', null=True, blank=True)
+ organization = models.ForeignKey(Organization, on_delete=models.CASCADE, null=True, blank=True)
+ status = models.CharField('状态', max_length=256, null=True, blank=True, choices=WEIBO_STATUS_CHOICES)
+ created = models.DateTimeField('创建时间', auto_now_add=True)
+ updated = models.DateTimeField('更新时间', auto_now=True)
+
+ def __str__(self):
+ return self.code
+
+
+# 微博文章采集
+class Weibi_data(models.Model):
+ id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
+ weiboid = models.CharField('微博ID', max_length=256, null=True, blank=True)
+ content = models.TextField('正文', null=True, blank=True)
+ url = models.CharField('文章url', max_length=256, null=True, blank=True)
+ originalimageurl = models.CharField('原始图片url', max_length=256, null=True, blank=True)
+ transpondimageurl = models.CharField('转发图片url', max_length=256, null=True, blank=True)
+ original = models.BooleanField('是否原创', null=True, blank=True)
+ site = models.CharField('发布位置', max_length=256, null=True, blank=True)
+ date = models.CharField('发布时间', max_length=256, null=True, blank=True)
+ tool = models.CharField('发布工具', max_length=256, null=True, blank=True)
+ like = models.CharField('点赞数', max_length=256, null=True, blank=True)
+ transpond = models.CharField('转发数', max_length=256, null=True, blank=True)
+ comment = models.CharField('评论数', max_length=256, null=True, blank=True)
+ title = models.CharField('文章标题', max_length=256, null=True, blank=True)
+ weibo = models.ForeignKey(Weibo, on_delete=models.CASCADE, null=True, blank=True)
+ created = models.DateTimeField('创建时间', auto_now_add=True)
+ updated = models.DateTimeField('更新时间', auto_now=True)
+
+ def __str__(self):
+ return self.title
+
+
+# 微博错别字
+class Weibo_Wrong(models.Model):
+ id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
+ wrong = models.CharField('错别字', max_length=256, null=True, blank=True)
+ idea = models.CharField('建议', max_length=256, null=True, blank=True)
+ site = models.CharField('位置', max_length=256, null=True, blank=True)
+ weibo = models.ForeignKey(Weibo, on_delete=models.CASCADE, null=True, blank=True)
+ change = models.BooleanField('是否已修改', null=True, blank=True)
+ created = models.DateTimeField('创建时间', auto_now_add=True)
+ updated = models.DateTimeField('更新时间', auto_now=True)
+
+
+# 今日头条
+class Toutiao(models.Model):
+ TOUTIAO_STATUS_CHOICES = (
+ ('1', '开启'),
+ ('0', '关闭')
+ )
+ id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
+ code = models.CharField('头条号', max_length=256, null=True, blank=True)
+ toutiaoid = models.CharField('头条ID', max_length=256, null=True, blank=True)
+ alias = models.CharField('别名', max_length=256, null=True, blank=True)
+ image = models.FileField(upload_to='cover', null=True, blank=True)
+ organization = models.ForeignKey(Organization, on_delete=models.CASCADE, null=True, blank=True)
+ status = models.CharField('状态', max_length=256, null=True, blank=True, choices=TOUTIAO_STATUS_CHOICES)
+ created = models.DateTimeField('创建时间', auto_now_add=True)
+ updated = models.DateTimeField('更新时间', auto_now=True)
+
+ def __str__(self):
+ return self.code
+
+
+# 今日头条数据
+class Toutiao_data(models.Model):
+ id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
+ title = models.CharField('标题', max_length=256, null=True, blank=True)
+ url = models.CharField('链接', max_length=256, null=True, blank=True)
+ img = models.CharField('缩略图', max_length=256, null=True, blank=True)
+ count = models.CharField('阅读数', max_length=256, null=True, blank=True)
+ commentcount = models.CharField('评论数', max_length=256, null=True, blank=True)
+ reply = models.CharField('作者回复数', max_length=256, null=True, blank=True)
+ date = models.CharField('时间', max_length=256, null=True, blank=True)
+ content = models.TextField('正文', null=True, blank=True)
+ comment = models.TextField('评论', null=True, blank=True)
+ toutiao = models.ForeignKey(Toutiao, on_delete=models.CASCADE, null=True, blank=True)
+ created = models.DateTimeField('创建时间', auto_now_add=True)
+ updated = models.DateTimeField('更新时间', auto_now=True)
+
+ def __str__(self):
+ return self.title
+
+
+# 今日头条评论
+class Toutiao_comment(models.Model):
+ id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
+ comment = models.TextField('评论', null=True, blank=True)
+ user = models.CharField('用户', max_length=256, null=True, blank=True)
+ reply = models.TextField('回复', null=True, blank=True)
+ toutiao = models.ForeignKey(Toutiao, on_delete=models.CASCADE, null=True, blank=True)
+ created = models.DateTimeField('创建时间', auto_now_add=True)
+ updated = models.DateTimeField('更新时间', auto_now=True)
+
+ def __str__(self):
+ return self.user
+
+
+# 今日头条错别字
+class Toutiao_Wrong(models.Model):
+ id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
+ wrong = models.CharField('错别字', max_length=256, null=True, blank=True)
+ idea = models.CharField('建议', max_length=256, null=True, blank=True)
+ site = models.CharField('位置', max_length=256, null=True, blank=True)
+ toutiao = models.ForeignKey(Toutiao, on_delete=models.CASCADE, null=True, blank=True)
+ change = models.BooleanField('是否已修改', null=True, blank=True)
+ created = models.DateTimeField('创建时间', auto_now_add=True)
+ updated = models.DateTimeField('更新时间', auto_now=True)
+
+ def __str__(self):
+ return self.wrong
+
+
+# 其他新媒体
+class Qita(models.Model):
+ QITA_STATUS_CHOICES = (
+ ('1', '开启'),
+ ('0', '关闭')
+ )
+ id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
+ type = models.CharField('新媒体类型', max_length=256, null=True, blank=True)
+ name = models.CharField('新媒体名称', max_length=256, null=True, blank=True)
+ qitaid = models.CharField('新媒体ID', max_length=256, null=True, blank=True)
+ alias = models.CharField('别名', max_length=256, null=True, blank=True)
+ image = models.FileField(upload_to='cover', null=True, blank=True)
+ organization = models.ForeignKey(Organization, on_delete=models.CASCADE, null=True, blank=True)
+ status = models.CharField('状态', max_length=256, null=True, blank=True, choices=QITA_STATUS_CHOICES)
+ created = models.DateTimeField('创建时间', auto_now_add=True)
+ updated = models.DateTimeField('更新时间', auto_now=True)
+
+ def __str__(self):
+ return self.name
+
+#其他新媒体监测
+class Qita_jc(models.Model):
+ id = models.UUIDField('id', primary_key=True, default=uuid.uuid4)
+ mewnedia = models.ForeignKey(Qita,on_delete=models.CASCADE)
+ count = models.CharField('总发文量', max_length=256, null=True, blank=True)
+ count_jc = models.CharField('监测时间内发文量', max_length=256, null=True, blank=True)
+ comment = models.CharField('评论数', max_length=256, null=True, blank=True)
+ reply = models.CharField('作者回复数', max_length=256, null=True, blank=True)
+ date = models.CharField('最近发文日期', max_length=256, null=True, blank=True)
+ created = models.DateTimeField('创建时间', auto_now_add=True)
+ updated = models.DateTimeField('更新时间', auto_now=True)
+
+ def __str__(self):
+ return self.mewnedia.name
+#5级地名库
+class Area_code_2020(models.Model):
+ code = models.CharField('区划代码',max_length=256,null=True,blank=True)
+ name = models.CharField('名称',max_length=256,null=True,blank=True)
+ level = models.CharField('级别1-5,省市县镇村',max_length=256,null=True,blank=True)
+ pcode = models.CharField('父级区划代码',max_length=256,null=True,blank=True)
+
+ def __str__(self):
+ return self.name
diff --git a/dashboard/templates/dashboard/base/header.html b/dashboard/templates/dashboard/base/header.html
index 2e7d847..80742a1 100644
--- a/dashboard/templates/dashboard/base/header.html
+++ b/dashboard/templates/dashboard/base/header.html
@@ -1,381 +1,383 @@
-{% load static %}
-
-
-
-
-
-
-
-
-
- {% if user.is_authenticated %}
-
- {% else %}
-
- {% endif %}
-
-
-
-
+{% load static %}
+
+
+
+
+
+
+
+
+
+ {% if user.is_authenticated %}
+
+ {% else %}
+
+ {% endif %}
+
+
+
+
diff --git a/dashboard/templates/dashboard/base/left.html b/dashboard/templates/dashboard/base/left.html
index 9f4fd8d..e4f249d 100644
--- a/dashboard/templates/dashboard/base/left.html
+++ b/dashboard/templates/dashboard/base/left.html
@@ -1,188 +1,194 @@
-
-
-
-
-
-
-
-
-
-
- {% for u in user.userprofile_set.all %}
-
{{ u.organization }}
- {% endfor %}
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+ {% for u in user.userprofile_set.all %}
+
{{ u.organization }}
+ {% endfor %}
+
+
+
+
+
+
+
+
+
diff --git a/dashboard/templates/dashboard/index.html b/dashboard/templates/dashboard/index.html
index 4028a06..741732d 100644
--- a/dashboard/templates/dashboard/index.html
+++ b/dashboard/templates/dashboard/index.html
@@ -1,550 +1,560 @@
-{% extends 'dashboard/base/base.html' %}
-{% load static %}
-{% block css %}
-
-
-
-{% endblock %}
-{% block content %}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {#
#}
-
-
-
{{ weixin_count }}
- 微信
-
-
-
-
-
- {#
#}
-
-
-
{{ weibo_count }}
- 微博
-
-
-
-
-
- {#
#}
-
-
-
{{ toutiao_count }}
- 今日头条
-
-
-
-
-
- {#
#}
-
-
-
{{ qita_count }}
- 其他新媒体
-
-
-
-
-
-
-
-
-
-
98.95%
-
SERVER UP
-
-
Loading...
-
-
-
-
-
2332
-
USERS ONLINE
-
-
Loading...
-
-
-
-
-
342/0
-
ORDERS / SALES
-
-
Loading...
-
-
-
-
-
-
-
-
- PAGE VIEWS UNIQUE VISITORS
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- CPU USAGE
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Visitor's Statistics
-
-
-
-
Unique Visitors
-
Last Week Rise by 62%
-
-
-
Registrations
-
Up by 57% last 7 days
-
-
-
Direct Sales
-
Last Month Rise by 22%
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Groups
-
- -
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
Favourites
-
-
-
-
More Contacts
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Body goes here...
-
-
-
-
-
-
-
-
-
-{% endblock %}
-{% block add_js %}
-
-
-
-
-
-
-
-
-
-
-
-
-{% endblock %}
-
-
+{% extends 'dashboard/base/base.html' %}
+{% load static %}
+{% block css %}
+
+
+
+{% endblock %}
+{% block content %}
+
+
+
+
+
+
+
+
+
+
+
+
+ {% if messages %}
+
+
+ {% for message in messages %}
+ {{ message }}.
+ {% endfor %}
+
+ {% endif %}
+
+
+
+
+
+
+
+
+
+
+ {#
#}
+
+
+
{{ weixin_count }}
+ 微信
+
+
+
+
+
+ {#
#}
+
+
+
{{ weibo_count }}
+ 微博
+
+
+
+
+
+ {#
#}
+
+
+
{{ toutiao_count }}
+ 今日头条
+
+
+
+
+
+ {#
#}
+
+
+
{{ qita_count }}
+ 其他新媒体
+
+
+
+
+
+
+
+
+
+
98.95%
+
SERVER UP
+
+
Loading...
+
+
+
+
+
2332
+
USERS ONLINE
+
+
Loading...
+
+
+
+
+
342/0
+
ORDERS / SALES
+
+
Loading...
+
+
+
+
+
+
+
+
+ PAGE VIEWS UNIQUE VISITORS
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CPU USAGE
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Visitor's Statistics
+
+
+
+
Unique Visitors
+
Last Week Rise by 62%
+
+
+
Registrations
+
Up by 57% last 7 days
+
+
+
Direct Sales
+
Last Month Rise by 22%
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Groups
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
Favourites
+
+
+
+
More Contacts
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Body goes here...
+
+
+
+
+
+
+
+
+
+{% endblock %}
+{% block add_js %}
+
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
+
+
diff --git a/dashboard/templates/dashboard/login.html b/dashboard/templates/dashboard/login.html
index 031f799..8256657 100644
--- a/dashboard/templates/dashboard/login.html
+++ b/dashboard/templates/dashboard/login.html
@@ -1,149 +1,149 @@
-{% extends 'dashboard/base/base.html' %}
-{% load static %}
-{% block css %}
-
-{% endblock %}
-{% block header %} {% endblock %}
-{% block content %}
-
-
-
-
-
- {% if messages %}
-
-
- {% for message in messages %}
- {{ message }}.
- {% endfor %}
-
- {% endif %}
-
-
-
-
-
- 忘记密码
- 注册
-
-
-
-
-
-
-
-
-
-
-
-
-
- Body goes here...
-
-
-
-
-
-
-
-
-{% endblock %}
-{% block add_js %}
-
-{% endblock %}
+{% extends 'dashboard/base/base.html' %}
+{% load static %}
+{% block css %}
+
+{% endblock %}
+{% block header %} {% endblock %}
+{% block content %}
+
+
+
+
+
+ {% if messages %}
+
+
+ {% for message in messages %}
+ {{ message }}.
+ {% endfor %}
+
+ {% endif %}
+
+
+
+
+
+ 忘记密码
+ 注册
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Body goes here...
+
+
+
+
+
+
+
+
+{% endblock %}
+{% block add_js %}
+
+{% endblock %}
diff --git a/dashboard/templates/dashboard/register.html b/dashboard/templates/dashboard/register.html
index 640b084..847e4d4 100644
--- a/dashboard/templates/dashboard/register.html
+++ b/dashboard/templates/dashboard/register.html
@@ -1,188 +1,188 @@
-{% extends 'dashboard/base/base.html' %}
-{% load static %}
-{% block css %}
-
-{% endblock %}
-{% block header %}{% endblock %}
-{% block content %}
-
-
-
-
- {% if messages %}
-
-
-
- {% for message in messages %}
- {{ message }}.
- {% endfor %}
-
- {% endif %}
-
-
-
-
-
-
- 忘记密码
- 登录
-
-
-
-
-
-
-
-
-
-
-
-
- Body goes here...
-
-
-
-
-
-
-
-
-{% endblock %}
-{% block add_js %}
-
-{% endblock %}
-
+{% extends 'dashboard/base/base.html' %}
+{% load static %}
+{% block css %}
+
+{% endblock %}
+{% block header %}{% endblock %}
+{% block content %}
+
+
+
+
+ {% if messages %}
+
+
+
+ {% for message in messages %}
+ {{ message }}.
+ {% endfor %}
+
+ {% endif %}
+
+
+
+
+
+
+ 忘记密码
+ 登录
+
+
+
+
+
+
+
+
+
+
+
+
+ Body goes here...
+
+
+
+
+
+
+
+
+{% endblock %}
+{% block add_js %}
+
+{% endblock %}
+
diff --git a/dashboard/views.py b/dashboard/views.py
index f24d399..857473f 100644
--- a/dashboard/views.py
+++ b/dashboard/views.py
@@ -51,8 +51,8 @@ def user_login(request):
print(username,password)
if username is not None and password is not None:
try:
- # user = authenticate(username=username, password=password)
- user = User.objects.get(Q(username=username) | Q(first_name=username) | Q(email=username))
+ user = authenticate(username=username, password=password)
+ # user = User.objects.get(username=phone)
if user is not None:
if user.check_password(password):
login(request, user)
@@ -73,7 +73,7 @@ def register(request):
password = None
confirm_password = None
name = None
- phone = None
+ # phone = None
image = None
flag = False
o = None
@@ -94,10 +94,10 @@ def register(request):
messages.error(request, '请输入邮箱')
else:
email = request.POST.get('email')
- if not request.POST.get('phone'):
- messages.error(request, '请输入电话')
- else:
- phone = request.POST.get('phone')
+ # if not request.POST.get('phone'):
+ # messages.error(request, '请输入电话')
+ # else:
+ # phone = request.POST.get('phone')
if not request.POST.get('username'):
messages.error(request, '请输入用户名')
else:
@@ -116,9 +116,9 @@ def register(request):
else:
image = request.FILES.get('image')
print(str(image)+"1111111111111111111111111111111111111111111")
- if request.POST.get('sex') == 0:
+ if request.POST.get('sex') == '1':
sex = '男'
- else:
+ elif request.POST.get('sex') == '2':
sex = '女'
captcha_input = request.POST.get('captcha_1')
captcha_hashkey = request.POST.get('captcha_0')
@@ -137,16 +137,16 @@ def register(request):
filter_result = User.objects.filter(username=username)
if len(filter_result) > 0:
- messages.error(request, '对不起,您输入的用户名已被注册')
- return render(request, "dashboard/register.html")
+ messages.error(request, '对不起,您输入的电话号码已被注册')
+ return HttpResponseRedirect('/register/')
if username is not None and password is not None and confirm_password is not None and email is not None and flag:
- user = User.objects.create_user(username, email, password)
+ user = User.objects.create_user(username,email,password)
user.is_active = True
- user.is_staff = True
- user.first_name = phone
+ # user.is_staff = True
+ # user.first_name = phone
user.save()
- userprofile = Userprofile(name=name,image=image,user_id=user.id,organization_id=o,sex=sex)
+ userprofile = Userprofile(name=name,image=image,user_id=user.id,organization_id=o,sex=sex,status=0)
userprofile.save()
messages.success(request, '注册成功,请登录')
return HttpResponseRedirect('/login/')
diff --git a/management/templates/management/user-management-update.html b/management/templates/management/user-management-update.html
new file mode 100644
index 0000000..8e13aab
--- /dev/null
+++ b/management/templates/management/user-management-update.html
@@ -0,0 +1,119 @@
+{% extends 'dashboard/base/base.html' %}
+{% load static %}
+{% block content %}
+
+
+
+
+
+
+
+
+
+ {% if messages %}
+
+
+ {% for message in messages %}
+ {{ message }}.
+ {% endfor %}
+
+ {% endif %}
+
+
+
+
+
+
+
+
+
+{% endblock %}
+
diff --git a/management/templates/management/user-management.html b/management/templates/management/user-management.html
index 5bcbdfa..1939180 100644
--- a/management/templates/management/user-management.html
+++ b/management/templates/management/user-management.html
@@ -1,80 +1,80 @@
-{% extends 'dashboard/base/base.html' %}
-{% load static %}
-{% block css %}
-
-
-{% endblock %}
-{% block content %}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 头像 |
- 姓名 |
- 电话 |
- 单位名称 |
- 单位类型 |
- 行政区划 |
- 操作 |
-
-
-
- {% for u in userallinfo %}
-
- |
- {{ u.name }} |
- {{ u.phone }} |
- {{ u.organization }} |
- {{ u.type }} |
- {{ u.administrativedivision }} |
-
- 删除
- |
-
- {% endfor %}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{% endblock %}
-{% block add_js %}
-
-
-
-{% endblock %}
+{% extends 'dashboard/base/base.html' %}
+{% load static %}
+{% block css %}
+
+
+{% endblock %}
+{% block content %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 头像 |
+ 姓名 |
+ 电话 |
+ 单位名称 |
+ 单位类型 |
+ 行政区划 |
+ 操作 |
+
+
+
+ {% for u in userallinfo %}
+
+ |
+ {{ u.name }} |
+ {{ u.phone }} |
+ {{ u.organization }} |
+ {{ u.type }} |
+ {{ u.administrativedivision }} |
+
+ 删除
+ |
+
+ {% endfor %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
+{% block add_js %}
+
+
+
+{% endblock %}
diff --git a/management/urls.py b/management/urls.py
index 13f020e..092e072 100644
--- a/management/urls.py
+++ b/management/urls.py
@@ -1,47 +1,48 @@
-from django.urls import path
-
-from management import views
-
-urlpatterns = [
- # 用户管理
- path('user/management/', views.user_management, name='user-management-management'),
- path('user/delete//', views.user_delete, name='user-management-delete'),
- # 群组管理
- path('group/management/', views.group_management, name='group-management-management'),
- path('group/create/', views.group_create, name='group-management-create'),
- path('group/update//', views.group_update, name='group-management-update'),
- path('group/delete//', views.group_delete, name='group-management-delete'),
-
- # 添加群组管理员、成员
- path('group/admin/create//', views.group_admin_create, name='group-admin-create'),
- path('group/admin/delete///', views.group_admin_delete, name='group-admin-delete'),
- path('group/user/create//', views.group_user_create, name='group-user-create'),
- path('group/user/delete///', views.group_user_delete, name='group-user-delete'),
-
- # 主体单位管理
- path('organization/management/', views.organization_management, name='organization-management-management'),
- path('organization/create/', views.organization_create, name='organization-management-create'),
- path('organization/delete//', views.organization_delete, name='organization-management-delete'),
- path('organization/update//', views.organization_update, name='organization-management-update'),
-
- #新媒体管理
- path('newmedia/management/create/menu/',views.newmedia_management_create_menu,name='newmedia-management-create-menu'),
- path('newmedia/management/edit/menu/',views.newmedia_management_edit_menu,name='newmedia-management-edit-menu'),
- path('newmedia/management/create/weixin/',views.newmedia_management_create_weixin,name='newmedia-management-create-weixin'),
- path('newmedia/management/create/weibo/',views.newmedia_management_create_weibo,name='newmedia-management-create-weibo'),
- path('newmedia/management/create/toutiao/',views.newmedia_management_create_toutiao,name='newmedia-management-create-toutiao'),
- path('newmedia/management/create/qita/',views.newmedia_management_create_qita,name='newmedia-management-create-qita'),
- path('newmedia/management/edit/weixin/',views.newmedia_management_edit_weixin,name='newmedia-management-edit-weixin'),
- path('newmedia/management/edit/weibo/',views.newmedia_management_edit_weibo,name='newmedia-management-edit-weibo'),
- path('newmedia/management/edit/toutiao/',views.newmedia_management_edit_toutiao,name='newmedia-management-edit-toutiao'),
- path('newmedia/management/edit/qita/',views.newmedia_management_edit_qita,name='newmedia-management-edit-qita'),
- path('newmedia/management/update/weixin//',views.newmedia_management_update_weixin,name='newmedia-management-update-weixin'),
- path('newmedia/management/update/weibo//',views.newmedia_management_update_weibo,name='newmedia-management-update-weibo'),
- path('newmedia/management/update/toutiao//',views.newmedia_management_update_toutiao,name='newmedia-management-update-toutiao'),
- path('newmedia/management/update/qita//',views.newmedia_management_update_qita,name='newmedia-management-update-qita'),
- path('newmedia/management/delete/weixin//',views.newmedia_management_delete_weixin,name='newmedia-management-delete-weixin'),
- path('newmedia/management/delete/weibo//',views.newmedia_management_delete_weibo,name='newmedia-management-delete-weibo'),
- path('newmedia/management/delete/toutiao//',views.newmedia_management_delete_toutiao,name='newmedia-management-delete-toutiao'),
- path('newmedia/management/delete/qita//',views.newmedia_management_delete_qita,name='newmedia-management-delete-qita'),
-
-]
+from django.urls import path
+
+from management import views
+
+urlpatterns = [
+ # 用户管理
+ path('user/management/', views.user_management, name='user-management-management'),
+ path('user/delete//', views.user_delete, name='user-management-delete'),
+ path('user/update//', views.user_update, name='user-management-update'),
+ # 群组管理
+ path('group/management/', views.group_management, name='group-management-management'),
+ path('group/create/', views.group_create, name='group-management-create'),
+ path('group/update//', views.group_update, name='group-management-update'),
+ path('group/delete//', views.group_delete, name='group-management-delete'),
+
+ # 添加群组管理员、成员
+ path('group/admin/create//', views.group_admin_create, name='group-admin-create'),
+ path('group/admin/delete///', views.group_admin_delete, name='group-admin-delete'),
+ path('group/user/create//', views.group_user_create, name='group-user-create'),
+ path('group/user/delete///', views.group_user_delete, name='group-user-delete'),
+
+ # 主体单位管理
+ path('organization/management/', views.organization_management, name='organization-management-management'),
+ path('organization/create/', views.organization_create, name='organization-management-create'),
+ path('organization/delete//', views.organization_delete, name='organization-management-delete'),
+ path('organization/update//', views.organization_update, name='organization-management-update'),
+
+ #新媒体管理
+ path('newmedia/management/create/menu/',views.newmedia_management_create_menu,name='newmedia-management-create-menu'),
+ path('newmedia/management/edit/menu/',views.newmedia_management_edit_menu,name='newmedia-management-edit-menu'),
+ path('newmedia/management/create/weixin/',views.newmedia_management_create_weixin,name='newmedia-management-create-weixin'),
+ path('newmedia/management/create/weibo/',views.newmedia_management_create_weibo,name='newmedia-management-create-weibo'),
+ path('newmedia/management/create/toutiao/',views.newmedia_management_create_toutiao,name='newmedia-management-create-toutiao'),
+ path('newmedia/management/create/qita/',views.newmedia_management_create_qita,name='newmedia-management-create-qita'),
+ path('newmedia/management/edit/weixin/',views.newmedia_management_edit_weixin,name='newmedia-management-edit-weixin'),
+ path('newmedia/management/edit/weibo/',views.newmedia_management_edit_weibo,name='newmedia-management-edit-weibo'),
+ path('newmedia/management/edit/toutiao/',views.newmedia_management_edit_toutiao,name='newmedia-management-edit-toutiao'),
+ path('newmedia/management/edit/qita/',views.newmedia_management_edit_qita,name='newmedia-management-edit-qita'),
+ path('newmedia/management/update/weixin//',views.newmedia_management_update_weixin,name='newmedia-management-update-weixin'),
+ path('newmedia/management/update/weibo//',views.newmedia_management_update_weibo,name='newmedia-management-update-weibo'),
+ path('newmedia/management/update/toutiao//',views.newmedia_management_update_toutiao,name='newmedia-management-update-toutiao'),
+ path('newmedia/management/update/qita//',views.newmedia_management_update_qita,name='newmedia-management-update-qita'),
+ path('newmedia/management/delete/weixin//',views.newmedia_management_delete_weixin,name='newmedia-management-delete-weixin'),
+ path('newmedia/management/delete/weibo//',views.newmedia_management_delete_weibo,name='newmedia-management-delete-weibo'),
+ path('newmedia/management/delete/toutiao//',views.newmedia_management_delete_toutiao,name='newmedia-management-delete-toutiao'),
+ path('newmedia/management/delete/qita//',views.newmedia_management_delete_qita,name='newmedia-management-delete-qita'),
+
+]
diff --git a/management/views.py b/management/views.py
index 25766e2..53fc29c 100644
--- a/management/views.py
+++ b/management/views.py
@@ -1,861 +1,912 @@
-import json
-
-from django.contrib import messages
-from django.contrib.auth.models import User
-from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
-from django.http import HttpResponse, HttpResponseRedirect
-from django.shortcuts import render
-
-from dashboard.models import Userprofile, Group, Organization, Level, Organizationtype, Area_code_2020, Weixin, Weibo, \
- Toutiao, Qita, Group_type, Group_admin, Group_user
-
-
-def user_management(request):
- userpaginator = User.objects.all().order_by('-date_joined')
- paginator = Paginator(userpaginator, 6)
- page = int(request.GET.get('page', 1))
- try:
- userpaginator = paginator.page(page)
- except PageNotAnInteger:
- userpaginator = paginator.page(1)
- except EmptyPage:
- userpaginator = paginator.page(paginator.num_pages)
- userallinfo = []
- for u in userpaginator:
- o = dict()
- o['id'] = str(u.id)
- o['image'] = u.userprofile_set.get(user_id=u.id).image.url
- o['name'] = u.userprofile_set.get(user_id=u.id).name
- o['phone'] = u.first_name
- o['organization'] = u.userprofile_set.get(user_id=u.id).organization.name
- o['type'] = u.userprofile_set.get(user_id=u.id).organization.organizationtype.organizationtype
- organization_id = Userprofile.objects.get(user_id=u.id).organization_id
- print(organization_id)
- o['administrativedivision'] = str(str(Organization.objects.get(id=organization_id).province) + '-' + str(
- Organization.objects.get(id=organization_id).cities) + '-' + str(
- Organization.objects.get(id=organization_id).district) + '-' + str(
- Organization.objects.get(id=organization_id).town) + '-' + str(
- Organization.objects.get(id=organization_id).village)).replace('None', '')
- userallinfo.append(o)
- print(userallinfo)
- return render(request, 'management/user-management.html',
- {'userallinfo': userallinfo, 'userpaginator': userpaginator})
-
-
-def user_delete(request, pk):
- user = User.objects.get(id=pk)
- user.delete()
- return HttpResponseRedirect('/management/user/management/')
-
-
-def group_management(request):
- group = Group.objects.all().order_by('-created')
- paginator = Paginator(group, 6)
- page = int(request.GET.get('page', 1))
- try:
- group = paginator.page(page)
- except PageNotAnInteger:
- group = paginator.page(1)
- except EmptyPage:
- group = paginator.page(paginator.num_pages)
- res = []
- for g in group:
- o = dict()
- o['id'] = str(g.id)
- o['image'] = g.image.url
- o['name'] = g.name
- o['type'] = g.type
- o['admin_count'] = Group_admin.objects.filter(group_id=g.id).count()
- o['user_count'] = Group_user.objects.filter(group_id=g.id).count()
- o['status'] = g.status
- res.append(o)
- return render(request, 'management/group-management.html', {'res': res, 'group': group})
-
-
-def group_update(request, pk):
- group = Group.objects.get(id=pk)
- GROUP_STATUS_CHOICES = Group.GROUP_STATUS_CHOICES
- group_status_choices_list = []
- for g in GROUP_STATUS_CHOICES:
- group_status_choices_list.append(list(g)[1])
- group_type = Group_type.objects.all()
- group_admin = Group_admin.objects.filter(group_id=pk)
- print(pk)
- g_a_list = []
- for g_a in group_admin:
- o = dict()
- o['id'] = str(g_a.id)
- o['image'] = Userprofile.objects.get(user_id=g_a.user.id).image.url
- o['username'] = g_a.user.username
- o['name'] = Userprofile.objects.get(user_id=g_a.user.id).name
- o['organization'] = Userprofile.objects.get(user_id=g_a.user.id).organization.name
- o['administrativedivision'] = str(g_a.group.province) + '-' + str(g_a.group.cities) + '-' + str(
- g_a.group.district) + '-' + str(g_a.group.town) + '-' + str(g_a.group.village)
- g_a_list.append(o)
- group_user = Group_user.objects.filter(group_id=pk)
- g_u_list = []
- for g_u in group_user:
- i = dict()
- i['id'] = str(g_u.id)
- i['image'] = Userprofile.objects.get(user_id=g_u.user.id).image.url
- i['username'] = g_u.user.username
- i['name'] = Userprofile.objects.get(user_id=g_u.user.id).name
- i['organization'] = Userprofile.objects.get(user_id=g_u.user.id).organization.name
- i['administrativedivision'] = str(g_u.group.province) + '-' + str(g_u.group.cities) + '-' + str(
- g_u.group.district) + '-' + str(g_u.group.town) + '-' + str(g_u.group.village)
- g_u_list.append(i)
- if request.method == 'POST':
- name = request.POST.get('name')
- presentation = request.POST.get('presentation')
- image = request.FILES.get('image')
- type = request.POST.get('type')
- status = request.POST.get('status')
- province = request.POST.get('province')
- print(str(province) + "66666666666666666666666666")
- if province != '' and province.isdigit():
- province_r = Area_code_2020.objects.get(code=province).name
- else:
- province_r = province
- city = request.POST.get('city')
- if city != '' and city.isdigit():
- city_r = Area_code_2020.objects.get(code=city).name
- else:
- city_r = city
- district = request.POST.get('district')
- if district != '' and district.isdigit():
- district_r = Area_code_2020.objects.get(code=district).name
- else:
- district_r = district
- town = request.POST.get('town')
- if town != '' and town.isdigit():
- town_r = Area_code_2020.objects.get(code=town).name
- else:
- town_r = town
- village = request.POST.get('village')
- if village != '' and village.isdigit():
- village_r = Area_code_2020.objects.get(code=village).name
- else:
- village_r = village
- if image is not None:
- Group.objects.filter(id=pk).update(name=name, presentation=presentation, type_id=type, status=status,
- province=province_r, cities=city_r, district=district_r, town=town_r,
- village=village_r)
- g = Group.objects.get(id=pk)
- g.image = image
- g.save()
- messages.success(request, '修改成功')
- return HttpResponseRedirect('/management/group/management/')
- else:
- Group.objects.filter(id=pk).update(name=name, presentation=presentation, type_id=type, status=status,
- province=province_r, cities=city_r, district=district_r, town=town_r,
- village=village_r)
- messages.success(request, '修改成功')
- return HttpResponseRedirect('/management/group/management/')
- return render(request, 'management/group-management-update.html',
- {'group': group, 'group_status_choices_list': group_status_choices_list, 'group_type': group_type,
- 'g_a_list': g_a_list, 'g_u_list': g_u_list})
-
-
-def group_create(request):
- GROUP_STATUS_CHOICES = Group.GROUP_STATUS_CHOICES
- group_status_choices_list = []
- for g in GROUP_STATUS_CHOICES:
- group_status_choices_list.append(list(g)[1])
- group_type = Group_type.objects.all()
- if request.method == 'POST':
- name = request.POST.get('name')
- presentation = request.POST.get('presentation')
- image = request.FILES.get('image')
- type = request.POST.get('type')
- status = request.POST.get('status')
- province = request.POST.get('province')
- if province != '':
- province_r = Area_code_2020.objects.get(code=province).name
- else:
- messages.error(request, '请选择行政区划')
- return HttpResponseRedirect('/management/organization/create/')
- city = request.POST.get('city')
- if city != '':
- city_r = Area_code_2020.objects.get(code=city).name
- else:
- city_r = city
- district = request.POST.get('district')
- if district != '':
- district_r = Area_code_2020.objects.get(code=district).name
- else:
- district_r = district
- town = request.POST.get('town')
- if town != '':
- town_r = Area_code_2020.objects.get(code=town).name
- else:
- town_r = town
- village = request.POST.get('village')
- if village != '':
- village_r = Area_code_2020.objects.get(code=village).name
- else:
- village_r = village
- print(name, presentation, image, type, status, province, city, district, town, village)
- if name is not None:
- group = Group(name=name, presentation=presentation, image=image, type_id=type, status=status,
- province=province_r, cities=city_r, district=district_r, town=town_r, village=village_r)
- group.save()
- messages.success(request, '添加成功')
- else:
- messages.error(request, '群组名不能为空')
- return HttpResponseRedirect('/management/group/management/')
- return render(request, 'management/group-management-create.html',
- {'group_status_choices_list': group_status_choices_list, 'group_type': group_type})
-
-
-def group_admin_create(request, pk):
- if request.method == 'POST':
- user = request.POST.get("user")
- print(user)
- results = Group_admin.objects.filter(user_id=user, group_id=pk).count()
- if results != 0:
- messages.success(request, "该管理员已经存在")
- return HttpResponseRedirect('/management/group/update/%s/' % (pk))
- group_admin = Group_admin(user_id=user, group_id=pk)
- group_admin.save()
- messages.success(request, "添加成功")
- return HttpResponseRedirect('/management/group/update/%s/' % (pk))
- group = Group.objects.get(id=pk).name
- user = User.objects.all()
- return render(request, 'management/group-admin-create.html', {'usee': user, 'group': group, 'pk': pk})
-
-
-def group_admin_delete(request, pk, group_pk):
- group_admin = Group_admin.objects.get(id=pk)
- group_admin.delete()
- messages.success(request, '删除成功')
- return HttpResponseRedirect('/management/group/update/%s/' % (group_pk))
-
-
-def group_user_create(request, pk):
- if request.method == 'POST':
- user = request.POST.get('user')
- results = Group_user.objects.filter(user_id=user, group_id=pk).count()
- if results != 0:
- messages.success(request, "该成员已经存在")
- return HttpResponseRedirect('/management/group/update/%s/' % (pk))
- group_user = Group_user(user_id=user, group_id=pk)
- group_user.save()
- messages.success(request, '添加成功')
- return HttpResponseRedirect('/management/group/update/%s' % (pk))
- group = Group.objects.get(id=pk).name
- user = User.objects.all()
- return render(request, 'management/group-user-create.html', {'usee': user, 'group': group, 'pk': pk})
-
-
-def group_user_delete(request, pk, group_pk):
- group_user = Group_user.objects.get(id=pk)
- group_user.delete()
- messages.success(request, '删除成功')
- return HttpResponseRedirect('/management/group/update/%s/' % (group_pk))
-
-
-def group_delete(request, pk):
- group = Group.objects.get(id=pk)
- group.delete()
- messages.success(request, '删除成功')
- return HttpResponseRedirect('/management/group/management/')
-
-
-def organization_management(request):
- organization = Organization.objects.all().order_by('-created')
- paginator = Paginator(organization, 6)
- page = int(request.GET.get('page', 1))
- try:
- organization = paginator.page(page)
- except PageNotAnInteger:
- organization = paginator.page(1)
- except EmptyPage:
- organization = paginator.page(paginator.num_pages)
- res = []
- for i in organization:
- o = dict()
- o['id'] = str(i.id)
- o['name'] = i.name
- o['image'] = i.image.url
- o['organizationtype'] = i.organizationtype.organizationtype
- o['administrativedivision'] = str(i.province) + '-' + str(i.cities) + '-' + str(i.district) + '-' + str(
- i.town) + '-' + str(i.village)
- o['usercount'] = Userprofile.objects.filter(organization_id=i.id).count()
- o['mediacount'] = Weixin.objects.filter(organization_id=i.id).count() + Weibo.objects.filter(
- organization_id=i.id).count() + Toutiao.objects.filter(organization_id=i.id).count() + Qita.objects.filter(
- organization_id=i.id).count()
- res.append(o)
-
- return render(request, 'management/organization-management.html', {"organization": organization, 'res': res})
-
-
-def organization_delete(request, pk):
- organization = Organization.objects.get(id=pk)
- organization.delete()
- messages.success(request, '删除成功')
- return HttpResponseRedirect('/management/organization/management/')
-
-
-def organization_update(request, pk):
- organization = Organization.objects.get(id=pk)
- organizationtype = Organizationtype.objects.all()
- if request.method == 'POST':
- name = request.POST.get('name')
- image = request.FILES.get('image')
- organizationtype = request.POST.get('organizationtype')
- province = request.POST.get('province')
- if province != '' and province.isdigit():
- province_r = Area_code_2020.objects.get(code=province).name
- else:
- province_r = province
- city = request.POST.get('city')
- if city != '' and city.isdigit():
- city_r = Area_code_2020.objects.get(code=city).name
- else:
- city_r = city
- district = request.POST.get('district')
- if district != '' and district.isdigit():
- district_r = Area_code_2020.objects.get(code=district).name
- else:
- district_r = district
- town = request.POST.get('town')
- if town != '' and town.isdigit():
- town_r = Area_code_2020.objects.get(code=town).name
- else:
- town_r = town
- village = request.POST.get('village')
- if village != '' and village.isdigit():
- village_r = Area_code_2020.objects.get(code=village).name
- else:
- village_r = village
- if name is not None:
- if image is not None:
- Organization.objects.filter(id=pk).update(name=name, organizationtype_id=organizationtype,
- province=province_r, cities=city_r, district=district_r,
- town=town_r, village=village_r)
- o = Organization.objects.get(id=pk)
- o.image = image
- o.save()
- messages.success(request, '修改成功')
- return HttpResponseRedirect('/management/organization/management/')
- else:
- Organization.objects.filter(id=pk).update(name=name, organizationtype_id=organizationtype,
- province=province_r, cities=city_r, district=district_r,
- town=town_r, village=village_r)
- messages.success(request, '修改成功')
- return HttpResponseRedirect('/management/organization/management/')
- return render(request, 'management/organization-management-update.html',
- {'organization': organization, 'organizationtype': organizationtype})
-
-
-def organization_create(request):
- organizationtype = Organizationtype.objects.all()
- if request.method == 'POST':
- name = request.POST.get('name')
- image = request.FILES.get('image')
- organizationtype = request.POST.get('organizationtype')
- province = request.POST.get('province')
- if province != '':
- province_r = Area_code_2020.objects.get(code=province).name
- else:
- messages.error(request, '请选择行政区划')
- return HttpResponseRedirect('/management/organization/create/')
- city = request.POST.get('city')
- if city != '':
- city_r = Area_code_2020.objects.get(code=city).name
- else:
- city_r = city
- district = request.POST.get('district')
- if district != '':
- district_r = Area_code_2020.objects.get(code=district).name
- else:
- district_r = district
- town = request.POST.get('town')
- if town != '':
- town_r = Area_code_2020.objects.get(code=town).name
- else:
- town_r = town
- village = request.POST.get('village')
- if village != '':
- village_r = Area_code_2020.objects.get(code=village).name
- else:
- village_r = village
- print(province, city)
- if name is not None:
- organization = Organization(name=name, image=image, organizationtype_id=organizationtype,
- province=province_r, cities=city_r, district=district_r, town=town_r,
- village=village_r)
- organization.save()
- messages.success(request, '添加成功')
- else:
- messages.error(request, '单位名不能为空')
- return HttpResponseRedirect('/management/organization/management/')
- return render(request, 'management/organization-management-create.html', {'organizationtype': organizationtype})
-
-
-def newmedia_management_create_menu(request):
- return render(request, 'management/newmedia-management-create-menu.html')
-
-
-def newmedia_management_create_weixin(request):
- WEIXIN_STATUS_CHOICES = Weixin.WEIXIN_STATUS_CHOICES
- weixin_status_choices_list = []
- for w in WEIXIN_STATUS_CHOICES:
- weixin_status_choices_list.append(list(w)[1])
- organization = Organization.objects.all()
- if request.method == 'POST':
- code = request.POST.get('code')
- weixinid = request.POST.get('weixinid')
- alias = request.POST.get('alias')
- image = request.FILES.get('image')
- organization = request.POST.get('organization')
- status = request.POST.get('status')
- if code is not None:
- if organization is not None:
- if image is not None:
- weixin = Weixin(code=code, weixinid=weixinid, alias=alias, image=image,
- organization_id=organization, status=status)
- weixin.save()
- messages.success(request, '创建成功')
- return HttpResponseRedirect('/management/newmedia/management/create/weixin/')
- else:
- weixin = Weixin(code=code, weixinid=weixinid, alias=alias, image='weixin.png',
- organization_id=organization, status=status)
- weixin.save()
- messages.success(request, '创建成功')
- return HttpResponseRedirect('/management/newmedia/management/create/weixin/')
- else:
- messages.success(request, "请选择单位")
- return render(request, 'management/newmedia-management-create-weixin.html',
- {'weixin_status_choices_list': weixin_status_choices_list, "organization": organization})
- else:
- messages.success(request, "微信公众号不能为空")
- return render(request, 'management/newmedia-management-create-weixin.html',
- {'weixin_status_choices_list': weixin_status_choices_list, "organization": organization})
- return render(request, 'management/newmedia-management-create-weixin.html',
- {'weixin_status_choices_list': weixin_status_choices_list, "organization": organization})
-
-
-def newmedia_management_create_weibo(request):
- WEIBO_STATUS_CHOICES = Weibo.WEIBO_STATUS_CHOICES
- weibo_status_choices_list = []
- for w in WEIBO_STATUS_CHOICES:
- weibo_status_choices_list.append(list(w)[1])
- organization = Organization.objects.all()
- if request.method == 'POST':
- code = request.POST.get('code')
- weiboid = request.POST.get('weiboid')
- print(str(weiboid) + "11111111111111111111111111111111111111")
- alias = request.POST.get('alias')
- image = request.FILES.get('image')
- organization = request.POST.get('organization')
- status = request.POST.get('status')
- if code is not None:
- if organization is not None:
- if image is not None:
- weibo = Weibo(code=code, weiboid=weiboid, alias=alias, image=image,
- organization_id=organization, status=status)
- weibo.save()
- messages.success(request, '创建成功')
- return HttpResponseRedirect('/management/newmedia/management/create/weibo/')
- else:
- weibo = Weibo(code=code, weiboid=weiboid, alias=alias, image='weibo.png',
- organization_id=organization, status=status)
- weibo.save()
- messages.success(request, '创建成功')
- return HttpResponseRedirect('/management/newmedia/management/create/weibo/')
- else:
- messages.success(request, "请选择单位")
- return render(request, 'management/newmedia-management-create-weibo.html',
- {'weibo_status_choices_list': weibo_status_choices_list, "organization": organization})
- else:
- messages.success(request, "微博号不能为空")
- return render(request, 'management/newmedia-management-create-weibo.html',
- {'weixin_status_choices_list': weibo_status_choices_list, "organization": organization})
- return render(request, 'management/newmedia-management-create-weibo.html',
- {'weibo_status_choices_list': weibo_status_choices_list, "organization": organization})
-
-
-def newmedia_management_create_toutiao(request):
- TOUTIAO_STATUS_CHOICES = Toutiao.TOUTIAO_STATUS_CHOICES
- toutiao_status_choices_list = []
- for w in TOUTIAO_STATUS_CHOICES:
- toutiao_status_choices_list.append(list(w)[1])
- organization = Organization.objects.all()
- if request.method == 'POST':
- code = request.POST.get('code')
- toutiaoid = request.POST.get('toutiaoid')
- alias = request.POST.get('alias')
- image = request.FILES.get('image')
- organization = request.POST.get('organization')
- status = request.POST.get('status')
- if code is not None:
- if organization is not None:
- if image is not None:
- toutiao = Toutiao(code=code, toutiaoid=toutiaoid, alias=alias, image=image,
- organization_id=organization, status=status)
- toutiao.save()
- messages.success(request, '创建成功')
- return HttpResponseRedirect('/management/newmedia/management/create/toutiao/')
- else:
- toutiao = Toutiao(code=code, toutiaoid=toutiaoid, alias=alias, image='toutiao.png',
- organization_id=organization, status=status)
- toutiao.save()
- messages.success(request, '创建成功')
- return HttpResponseRedirect('/management/newmedia/management/create/toutiao/')
- else:
- messages.success(request, "请选择单位")
- return render(request, 'management/newmedia-management-create-toutiao.html',
- {'toutiao_status_choices_list': toutiao_status_choices_list,
- "organization": organization})
- else:
- messages.success(request, "头条号不能为空")
- return render(request, 'management/newmedia-management-create-toutiao.html',
- {'toutiao_status_choices_list': toutiao_status_choices_list, "organization": organization})
- return render(request, 'management/newmedia-management-create-toutiao.html',
- {'toutiao_status_choices_list': toutiao_status_choices_list, "organization": organization})
-
-
-def newmedia_management_create_qita(request):
- QITA_STATUS_CHOICES = Qita.QITA_STATUS_CHOICES
- qita_status_choices_list = []
- for w in QITA_STATUS_CHOICES:
- qita_status_choices_list.append(list(w)[1])
- organization = Organization.objects.all()
- if request.method == 'POST':
- type = request.POST.get('type')
- name = request.POST.get('name')
- qitaid = request.POST.get('qitaid')
- alias = request.POST.get('alias')
- image = request.FILES.get('image')
- organization = request.POST.get('organization')
- status = request.POST.get('status')
- if name is not None:
- if organization is not None:
- if image is not None:
- qita = Qita(type=type, name=name, qitaid=qitaid, alias=alias, image=image,
- organization_id=organization, status=status)
- qita.save()
- messages.success(request, '创建成功')
- return HttpResponseRedirect('/management/newmedia/management/create/qita/')
- else:
- qita = Qita(type=type, name=name, qitaid=qitaid, alias=alias, image='qita.png',
- organization_id=organization, status=status)
- qita.save()
- messages.success(request, '创建成功')
- return HttpResponseRedirect('/management/newmedia/management/create/qita/')
- else:
- messages.success(request, "请选择单位")
- return render(request, 'management/newmedia-management-create-qita.html',
- {'qita_status_choices_list': qita_status_choices_list, "organization": organization})
- else:
- messages.success(request, "新媒体名称不能为空")
- return render(request, 'management/newmedia-management-create-qita.html',
- {'qita_status_choices_list': qita_status_choices_list, "organization": organization})
- return render(request, 'management/newmedia-management-create-qita.html',
- {'qita_status_choices_list': qita_status_choices_list, "organization": organization})
-
-
-def newmedia_management_edit_menu(request):
- return render(request, 'management/newmedia-management-edit-menu.html')
-
-
-def newmedia_management_edit_weixin(request):
- weixin = Weixin.objects.all().order_by('-created')
- paginator = Paginator(weixin, 6)
- page = int(request.GET.get('page', 1))
- try:
- weixin = paginator.page(page)
- except PageNotAnInteger:
- weixin = paginator.page(1)
- except EmptyPage:
- weixin = paginator.page(paginator.num_pages)
- res = []
- for w in weixin:
- o = dict()
- o['id'] = str(w.id)
- o['image'] = w.image
- o['code'] = w.code
- o['weixinid'] = w.weixinid
- o['organization'] = w.organization.name
- o['organization_type'] = w.organization.organizationtype.organizationtype
- o['administrativedivision'] = str(w.organization.province) + '-' + str(w.organization.cities) + '-' + str(
- w.organization.district) + '-' + str(w.organization.town) + '-' + str(w.organization.village)
- o['status'] = w.status
- res.append(o)
- return render(request, 'management/newmedia-management-edit-weixin.html', {'weixin': weixin, 'res': res})
-
-
-def newmedia_management_edit_weibo(request):
- weibo = Weibo.objects.all().order_by('-created')
- paginator = Paginator(weibo, 6)
- page = int(request.GET.get('page', 1))
- try:
- weibo = paginator.page(page)
- except PageNotAnInteger:
- weibo = paginator.page(1)
- except EmptyPage:
- weibo = paginator.page(paginator.num_pages)
- res = []
- for w in weibo:
- o = dict()
- o['id'] = str(w.id)
- o['image'] = w.image
- o['code'] = w.code
- o['weiboid'] = w.weiboid
- o['organization'] = w.organization.name
- o['organization_type'] = w.organization.organizationtype.organizationtype
- o['administrativedivision'] = str(w.organization.province) + '-' + str(w.organization.cities) + '-' + str(
- w.organization.district) + '-' + str(w.organization.town) + '-' + str(w.organization.village)
- o['status'] = w.status
- res.append(o)
- return render(request, 'management/newmedia-management-edit-weibo.html', {'weibo': weibo, 'res': res})
-
-
-def newmedia_management_edit_toutiao(request):
- toutiao = Toutiao.objects.all().order_by('-created')
- paginator = Paginator(toutiao, 6)
- page = int(request.GET.get('page', 1))
- try:
- toutiao = paginator.page(page)
- except PageNotAnInteger:
- toutiao = paginator.page(1)
- except EmptyPage:
- toutiao = paginator.page(paginator.num_pages)
- res = []
- for w in toutiao:
- o = dict()
- o['id'] = str(w.id)
- o['image'] = w.image
- o['code'] = w.code
- o['toutiaoid'] = w.toutiaoid
- o['organization'] = w.organization.name
- o['organization_type'] = w.organization.organizationtype.organizationtype
- o['administrativedivision'] = str(w.organization.province) + '-' + str(w.organization.cities) + '-' + str(
- w.organization.district) + '-' + str(w.organization.town) + '-' + str(w.organization.village)
- o['status'] = w.status
- res.append(o)
- return render(request, 'management/newmedia-management-edit-toutiao.html', {'toutiao': toutiao, 'res': res})
-
-
-def newmedia_management_edit_qita(request):
- qita = Qita.objects.all().order_by('-created')
- paginator = Paginator(qita, 6)
- page = int(request.GET.get('page', 1))
- try:
- qita = paginator.page(page)
- except PageNotAnInteger:
- qita = paginator.page(1)
- except EmptyPage:
- qita = paginator.page(paginator.num_pages)
- res = []
- for w in qita:
- o = dict()
- o['id'] = str(w.id)
- o['image'] = w.image
- o['type'] = w.type
- o['name'] = w.name
- o['qitaid'] = w.qitaid
- o['organization'] = w.organization.name
- o['organization_type'] = w.organization.organizationtype.organizationtype
- o['administrativedivision'] = str(w.organization.province) + '-' + str(w.organization.cities) + '-' + str(
- w.organization.district) + '-' + str(w.organization.town) + '-' + str(w.organization.village)
- o['status'] = w.status
- res.append(o)
- return render(request, 'management/newmedia-management-edit-qita.html', {'qita': qita, 'res': res})
-
-
-def newmedia_management_update_weixin(request, pk):
- WEIXIN_STATUS_CHOICES = Weixin.WEIXIN_STATUS_CHOICES
- weixin_status_choices_list = []
- for w in WEIXIN_STATUS_CHOICES:
- weixin_status_choices_list.append(list(w)[1])
- weixin = Weixin.objects.get(id=pk)
- organization = Organization.objects.all()
- if request.method == 'POST':
- code = request.POST.get('code')
- weixinid = request.POST.get('weixinid')
- alias = request.POST.get('alias')
- image = request.FILES.get('image')
- organization = request.POST.get('organization')
- status = request.POST.get('status')
- if code is not None:
- if organization is not None:
- if image is not None:
- Weixin.objects.filter(id=pk).update(code=code, weixinid=weixinid, alias=alias,
- organization_id=organization, status=status)
- weixin.image = image
- weixin.save()
- messages.success(request, '修改成功')
- return HttpResponseRedirect('/management/newmedia/management/edit/weixin/')
- else:
- Weixin.objects.filter(id=pk).update(code=code, weixinid=weixinid, alias=alias,
- organization_id=organization, status=status)
- messages.success(request, '修改成功')
- return HttpResponseRedirect('/management/newmedia/management/edit/weixin/')
- else:
- messages.success(request, "请选择单位")
- return render(request, 'management/newmedia-management-update-weixin.html',
- {'weixin': weixin, 'organization': organization,
- 'weixin_status_choices_list': weixin_status_choices_list})
- else:
- messages.success(request, "微信公众号不能为空")
- return render(request, 'management/newmedia-management-update-weixin.html',
- {'weixin': weixin, 'organization': organization,
- 'weixin_status_choices_list': weixin_status_choices_list})
- return render(request, 'management/newmedia-management-update-weixin.html',
- {'weixin': weixin, 'organization': organization,
- 'weixin_status_choices_list': weixin_status_choices_list})
-
-def newmedia_management_update_weibo(request, pk):
- WEIBO_STATUS_CHOICES = Weibo.WEIBO_STATUS_CHOICES
- weibo_status_choices_list = []
- for w in WEIBO_STATUS_CHOICES:
- weibo_status_choices_list.append(list(w)[1])
- weibo = Weibo.objects.get(id=pk)
- organization = Organization.objects.all()
- if request.method == 'POST':
- code = request.POST.get('code')
- weiboid = request.POST.get('weiboid')
- alias = request.POST.get('alias')
- image = request.FILES.get('image')
- organization = request.POST.get('organization')
- status = request.POST.get('status')
- if code is not None:
- if organization is not None:
- if image is not None:
- Weibo.objects.filter(id=pk).update(code=code, weiboid=weiboid, alias=alias,
- organization_id=organization, status=status)
- weibo.image = image
- weibo.save()
- messages.success(request, '修改成功')
- return HttpResponseRedirect('/management/newmedia/management/edit/weibo/')
- else:
- Weibo.objects.filter(id=pk).update(code=code, weiboid=weiboid, alias=alias,
- organization_id=organization, status=status)
- messages.success(request, '修改成功')
- return HttpResponseRedirect('/management/newmedia/management/edit/weibo/')
- else:
- messages.success(request, "请选择单位")
- return render(request, 'management/newmedia-management-update-weibo.html',
- {'weibo': weibo, 'organization': organization,
- 'weibo_status_choices_list': weibo_status_choices_list})
- else:
- messages.success(request, "微博号不能为空")
- return render(request, 'management/newmedia-management-update-weibo.html',
- {'weibo': weibo, 'organization': organization,
- 'weibo_status_choices_list': weibo_status_choices_list})
- return render(request, 'management/newmedia-management-update-weibo.html',
- {'weibo': weibo, 'organization': organization,
- 'weibo_status_choices_list': weibo_status_choices_list})
-
-
-def newmedia_management_update_toutiao(request, pk):
- TOUTIAO_STATUS_CHOICES = Toutiao.TOUTIAO_STATUS_CHOICES
- toutiao_status_choices_list = []
- for w in TOUTIAO_STATUS_CHOICES:
- toutiao_status_choices_list.append(list(w)[1])
- toutiao = Toutiao.objects.get(id=pk)
- organization = Organization.objects.all()
- if request.method == 'POST':
- code = request.POST.get('code')
- toutiaoid = request.POST.get('toutiaoid')
- alias = request.POST.get('alias')
- image = request.FILES.get('image')
- organization = request.POST.get('organization')
- status = request.POST.get('status')
- if code is not None:
- if organization is not None:
- if image is not None:
- Toutiao.objects.filter(id=pk).update(code=code, toutiaoid=toutiaoid, alias=alias,
- organization_id=organization, status=status)
- toutiao.image = image
- toutiao.save()
- messages.success(request, '修改成功')
- return HttpResponseRedirect('/management/newmedia/management/edit/toutiao/')
- else:
- Toutiao.objects.filter(id=pk).update(code=code, toutiaoid=toutiaoid, alias=alias,
- organization_id=organization, status=status)
- messages.success(request, '修改成功')
- return HttpResponseRedirect('/management/newmedia/management/edit/toutiao/')
- else:
- messages.success(request, "请选择单位")
- return render(request, 'management/newmedia-management-update-toutiao.html',
- {'toutiao': toutiao, 'organization': organization,
- 'toutiao_status_choices_list': toutiao_status_choices_list})
- else:
- messages.success(request, "头条号不能为空")
- return render(request, 'management/newmedia-management-update-toutiao.html',
- {'toutiao': toutiao, 'organization': organization,
- 'toutiao_status_choices_list': toutiao_status_choices_list})
- return render(request, 'management/newmedia-management-update-toutiao.html',
- {'toutiao': toutiao, 'organization': organization,
- 'toutiao_status_choices_list': toutiao_status_choices_list})
-
-
-def newmedia_management_update_qita(request, pk):
- QITA_STATUS_CHOICES = Qita.QITA_STATUS_CHOICES
- qita_status_choices_list = []
- for w in QITA_STATUS_CHOICES:
- qita_status_choices_list.append(list(w)[1])
- organization = Organization.objects.all()
- qita = Qita.objects.get(id=pk)
- if request.method == 'POST':
- type = request.POST.get('type')
- name = request.POST.get('name')
- qitaid = request.POST.get('qitaid')
- alias = request.POST.get('alias')
- image = request.FILES.get('image')
- organization = request.POST.get('organization')
- status = request.POST.get('status')
- if name is not None:
- if organization is not None:
- if image is not None:
- Qita.objects.filter(id=pk).update(type=type, name=name, qitaid=qitaid, alias=alias,
- organization_id=organization, status=status)
- qita.image = image
- qita.save()
- messages.success(request, '修改成功')
- return HttpResponseRedirect('/management/newmedia/management/edit/qita/')
- else:
- Qita.objects.filter(id=pk).update(type=type, name=name, qitaid=qitaid, alias=alias,
- organization_id=organization, status=status)
- messages.success(request, '修改成功')
- return HttpResponseRedirect('/management/newmedia/management/edit/qita/')
- else:
- messages.success(request, "请选择单位")
- return render(request, 'management/newmedia-management-update-qita.html',
- {'qita': qita, 'organization': organization,
- 'qita_status_choices_list': qita_status_choices_list})
- else:
- messages.success(request, "新媒体名称不能为空")
- return render(request, 'management/newmedia-management-update-qita.html',
- {'qita': qita, 'organization': organization,
- 'qita_status_choices_list': qita_status_choices_list})
- return render(request, 'management/newmedia-management-update-qita.html',
- {'qita': qita, 'organization': organization,
- 'qita_status_choices_list': qita_status_choices_list})
-
-def newmedia_management_delete_weixin(request,pk):
- weixin = Weixin.objects.get(id=pk)
- weixin.delete()
- messages.success(request,"删除成功")
- return HttpResponseRedirect('/management/newmedia/management/edit/weixin/')
-
-def newmedia_management_delete_weibo(request,pk):
- weibo = Weibo.objects.get(id=pk)
- weibo.delete()
- messages.success(request,"删除成功")
- return HttpResponseRedirect('/management/newmedia/management/edit/weibo/')
-
-def newmedia_management_delete_toutiao(request,pk):
- toutiao = Toutiao.objects.get(id=pk)
- toutiao.delete()
- messages.success(request,"删除成功")
- return HttpResponseRedirect('/management/newmedia/management/edit/toutiao/')
-
-def newmedia_management_delete_qita(request,pk):
- qita = Qita.objects.get(id=pk)
- qita.delete()
- messages.success(request,"删除成功")
- return HttpResponseRedirect('/management/newmedia/management/edit/qita/')
+import json
+
+from django.contrib import messages
+from django.contrib.auth.hashers import make_password
+from django.contrib.auth.models import User
+from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
+from django.http import HttpResponse, HttpResponseRedirect
+from django.shortcuts import render
+
+from dashboard.models import Userprofile, Group, Organization, Level, Organizationtype, Area_code_2020, Weixin, Weibo, \
+ Toutiao, Qita, Group_type, Group_admin, Group_user
+
+
+def user_management(request):
+ userpaginator = User.objects.all().order_by('-date_joined')
+ paginator = Paginator(userpaginator, 6)
+ page = int(request.GET.get('page', 1))
+ try:
+ userpaginator = paginator.page(page)
+ except PageNotAnInteger:
+ userpaginator = paginator.page(1)
+ except EmptyPage:
+ userpaginator = paginator.page(paginator.num_pages)
+ userallinfo = []
+ for u in userpaginator:
+ o = dict()
+ o['id'] = str(u.id)
+ o['image'] = u.userprofile_set.get(user_id=u.id).image
+ o['name'] = u.userprofile_set.get(user_id=u.id).name
+ o['phone'] = u.username
+ o['organization'] = u.userprofile_set.get(user_id=u.id).organization.name
+ o['type'] = u.userprofile_set.get(user_id=u.id).organization.organizationtype.organizationtype
+ organization_id = Userprofile.objects.get(user_id=u.id).organization_id
+ print(organization_id)
+ o['administrativedivision'] = str(str(Organization.objects.get(id=organization_id).province) + '-' + str(
+ Organization.objects.get(id=organization_id).cities) + '-' + str(
+ Organization.objects.get(id=organization_id).district) + '-' + str(
+ Organization.objects.get(id=organization_id).town) + '-' + str(
+ Organization.objects.get(id=organization_id).village)).replace('None', '')
+ userallinfo.append(o)
+ print(userallinfo)
+ return render(request, 'management/user-management.html',
+ {'userallinfo': userallinfo, 'userpaginator': userpaginator})
+
+
+def user_delete(request, pk):
+ user = User.objects.get(id=pk)
+ user.delete()
+ return HttpResponseRedirect('/management/user/management/')
+
+
+def user_update(request, pk):
+ user = User.objects.get(id=pk)
+ userprofile = Userprofile.objects.get(user_id=user.id)
+ organization = Organization.objects.all()
+ if request.method == 'POST':
+ organization_id = request.POST.get('organization')
+ name = request.POST.get('name')
+ email = request.POST.get('email')
+ username = request.POST.get('username')
+ image = request.FILES.get('image')
+ passwordold = request.POST.get('passwordold')
+ passwordnew = request.POST.get('passwordnew')
+ confirm_password = request.POST.get('confirm_password')
+ if passwordold is not None and passwordnew is not None and confirm_password is not None:
+ if passwordnew == confirm_password:
+ user.email = email
+ user.username = username
+ user.password = make_password(passwordnew)
+ userprofile.organization_id = organization_id
+ userprofile.name = name
+ if image is not None:
+ userprofile.image = image
+ user.save()
+ userprofile.save()
+ messages.success(request,"修改成功")
+ return HttpResponseRedirect("/")
+ else:
+ messages.error(request,'两次输入密码不一致')
+ return HttpResponseRedirect('/management/user/update/%s/' % (pk))
+ else:
+ user.email = email
+ user.username = username
+ userprofile.organization_id = organization_id
+ userprofile.name = name
+ if image is not None:
+ userprofile.image = image
+ user.save()
+ userprofile.save()
+ messages.success(request, "修改成功")
+ return HttpResponseRedirect("/")
+
+ return render(request, 'management/user-management-update.html',
+ {'usee': user, 'userprofile': userprofile, 'organization': organization})
+
+
+def group_management(request):
+ group = Group.objects.all().order_by('-created')
+ paginator = Paginator(group, 6)
+ page = int(request.GET.get('page', 1))
+ try:
+ group = paginator.page(page)
+ except PageNotAnInteger:
+ group = paginator.page(1)
+ except EmptyPage:
+ group = paginator.page(paginator.num_pages)
+ res = []
+ for g in group:
+ o = dict()
+ o['id'] = str(g.id)
+ o['image'] = g.image.url
+ o['name'] = g.name
+ o['type'] = g.type
+ o['admin_count'] = Group_admin.objects.filter(group_id=g.id).count()
+ o['user_count'] = Group_user.objects.filter(group_id=g.id).count()
+ o['status'] = g.status
+ res.append(o)
+ return render(request, 'management/group-management.html', {'res': res, 'group': group})
+
+
+def group_update(request, pk):
+ group = Group.objects.get(id=pk)
+ GROUP_STATUS_CHOICES = Group.GROUP_STATUS_CHOICES
+ group_status_choices_list = []
+ for g in GROUP_STATUS_CHOICES:
+ group_status_choices_list.append(list(g)[1])
+ group_type = Group_type.objects.all()
+ group_admin = Group_admin.objects.filter(group_id=pk)
+ print(pk)
+ g_a_list = []
+ for g_a in group_admin:
+ o = dict()
+ o['id'] = str(g_a.id)
+ o['image'] = Userprofile.objects.get(user_id=g_a.user.id).image.url
+ o['username'] = g_a.user.username
+ o['name'] = Userprofile.objects.get(user_id=g_a.user.id).name
+ o['organization'] = Userprofile.objects.get(user_id=g_a.user.id).organization.name
+ o['administrativedivision'] = str(g_a.group.province) + '-' + str(g_a.group.cities) + '-' + str(
+ g_a.group.district) + '-' + str(g_a.group.town) + '-' + str(g_a.group.village)
+ g_a_list.append(o)
+ group_user = Group_user.objects.filter(group_id=pk)
+ g_u_list = []
+ for g_u in group_user:
+ i = dict()
+ i['id'] = str(g_u.id)
+ i['image'] = Userprofile.objects.get(user_id=g_u.user.id).image.url
+ i['username'] = g_u.user.username
+ i['name'] = Userprofile.objects.get(user_id=g_u.user.id).name
+ i['organization'] = Userprofile.objects.get(user_id=g_u.user.id).organization.name
+ i['administrativedivision'] = str(g_u.group.province) + '-' + str(g_u.group.cities) + '-' + str(
+ g_u.group.district) + '-' + str(g_u.group.town) + '-' + str(g_u.group.village)
+ g_u_list.append(i)
+ if request.method == 'POST':
+ name = request.POST.get('name')
+ presentation = request.POST.get('presentation')
+ image = request.FILES.get('image')
+ type = request.POST.get('type')
+ status = request.POST.get('status')
+ province = request.POST.get('province')
+ print(str(province) + "66666666666666666666666666")
+ if province != '' and province.isdigit():
+ province_r = Area_code_2020.objects.get(code=province).name
+ else:
+ province_r = province
+ city = request.POST.get('city')
+ if city != '' and city.isdigit():
+ city_r = Area_code_2020.objects.get(code=city).name
+ else:
+ city_r = city
+ district = request.POST.get('district')
+ if district != '' and district.isdigit():
+ district_r = Area_code_2020.objects.get(code=district).name
+ else:
+ district_r = district
+ town = request.POST.get('town')
+ if town != '' and town.isdigit():
+ town_r = Area_code_2020.objects.get(code=town).name
+ else:
+ town_r = town
+ village = request.POST.get('village')
+ if village != '' and village.isdigit():
+ village_r = Area_code_2020.objects.get(code=village).name
+ else:
+ village_r = village
+ if image is not None:
+ Group.objects.filter(id=pk).update(name=name, presentation=presentation, type_id=type, status=status,
+ province=province_r, cities=city_r, district=district_r, town=town_r,
+ village=village_r)
+ g = Group.objects.get(id=pk)
+ g.image = image
+ g.save()
+ messages.success(request, '修改成功')
+ return HttpResponseRedirect('/management/group/management/')
+ else:
+ Group.objects.filter(id=pk).update(name=name, presentation=presentation, type_id=type, status=status,
+ province=province_r, cities=city_r, district=district_r, town=town_r,
+ village=village_r)
+ messages.success(request, '修改成功')
+ return HttpResponseRedirect('/management/group/management/')
+ return render(request, 'management/group-management-update.html',
+ {'group': group, 'group_status_choices_list': group_status_choices_list, 'group_type': group_type,
+ 'g_a_list': g_a_list, 'g_u_list': g_u_list})
+
+
+def group_create(request):
+ GROUP_STATUS_CHOICES = Group.GROUP_STATUS_CHOICES
+ group_status_choices_list = []
+ for g in GROUP_STATUS_CHOICES:
+ group_status_choices_list.append(list(g)[1])
+ group_type = Group_type.objects.all()
+ if request.method == 'POST':
+ name = request.POST.get('name')
+ presentation = request.POST.get('presentation')
+ image = request.FILES.get('image')
+ type = request.POST.get('type')
+ status = request.POST.get('status')
+ province = request.POST.get('province')
+ if province != '':
+ province_r = Area_code_2020.objects.get(code=province).name
+ else:
+ messages.error(request, '请选择行政区划')
+ return HttpResponseRedirect('/management/organization/create/')
+ city = request.POST.get('city')
+ if city != '':
+ city_r = Area_code_2020.objects.get(code=city).name
+ else:
+ city_r = city
+ district = request.POST.get('district')
+ if district != '':
+ district_r = Area_code_2020.objects.get(code=district).name
+ else:
+ district_r = district
+ town = request.POST.get('town')
+ if town != '':
+ town_r = Area_code_2020.objects.get(code=town).name
+ else:
+ town_r = town
+ village = request.POST.get('village')
+ if village != '':
+ village_r = Area_code_2020.objects.get(code=village).name
+ else:
+ village_r = village
+ print(name, presentation, image, type, status, province, city, district, town, village)
+ if name is not None:
+ group = Group(name=name, presentation=presentation, image=image, type_id=type, status=status,
+ province=province_r, cities=city_r, district=district_r, town=town_r, village=village_r)
+ group.save()
+ messages.success(request, '添加成功')
+ else:
+ messages.error(request, '群组名不能为空')
+ return HttpResponseRedirect('/management/group/management/')
+ return render(request, 'management/group-management-create.html',
+ {'group_status_choices_list': group_status_choices_list, 'group_type': group_type})
+
+
+def group_admin_create(request, pk):
+ if request.method == 'POST':
+ user = request.POST.get("user")
+ print(user)
+ results = Group_admin.objects.filter(user_id=user, group_id=pk).count()
+ if results != 0:
+ messages.success(request, "该管理员已经存在")
+ return HttpResponseRedirect('/management/group/update/%s/' % (pk))
+ group_admin = Group_admin(user_id=user, group_id=pk)
+ group_admin.save()
+ messages.success(request, "添加成功")
+ return HttpResponseRedirect('/management/group/update/%s/' % (pk))
+ group = Group.objects.get(id=pk).name
+ user = User.objects.all()
+ return render(request, 'management/group-admin-create.html', {'usee': user, 'group': group, 'pk': pk})
+
+
+def group_admin_delete(request, pk, group_pk):
+ group_admin = Group_admin.objects.get(id=pk)
+ group_admin.delete()
+ messages.success(request, '删除成功')
+ return HttpResponseRedirect('/management/group/update/%s/' % (group_pk))
+
+
+def group_user_create(request, pk):
+ if request.method == 'POST':
+ user = request.POST.get('user')
+ results = Group_user.objects.filter(user_id=user, group_id=pk).count()
+ if results != 0:
+ messages.success(request, "该成员已经存在")
+ return HttpResponseRedirect('/management/group/update/%s/' % (pk))
+ group_user = Group_user(user_id=user, group_id=pk)
+ group_user.save()
+ messages.success(request, '添加成功')
+ return HttpResponseRedirect('/management/group/update/%s' % (pk))
+ group = Group.objects.get(id=pk).name
+ user = User.objects.all()
+ return render(request, 'management/group-user-create.html', {'usee': user, 'group': group, 'pk': pk})
+
+
+def group_user_delete(request, pk, group_pk):
+ group_user = Group_user.objects.get(id=pk)
+ group_user.delete()
+ messages.success(request, '删除成功')
+ return HttpResponseRedirect('/management/group/update/%s/' % (group_pk))
+
+
+def group_delete(request, pk):
+ group = Group.objects.get(id=pk)
+ group.delete()
+ messages.success(request, '删除成功')
+ return HttpResponseRedirect('/management/group/management/')
+
+
+def organization_management(request):
+ organization = Organization.objects.all().order_by('-created')
+ paginator = Paginator(organization, 6)
+ page = int(request.GET.get('page', 1))
+ try:
+ organization = paginator.page(page)
+ except PageNotAnInteger:
+ organization = paginator.page(1)
+ except EmptyPage:
+ organization = paginator.page(paginator.num_pages)
+ res = []
+ for i in organization:
+ o = dict()
+ o['id'] = str(i.id)
+ o['name'] = i.name
+ o['image'] = i.image.url
+ o['organizationtype'] = i.organizationtype.organizationtype
+ o['administrativedivision'] = str(i.province) + '-' + str(i.cities) + '-' + str(i.district) + '-' + str(
+ i.town) + '-' + str(i.village)
+ o['usercount'] = Userprofile.objects.filter(organization_id=i.id).count()
+ o['mediacount'] = Weixin.objects.filter(organization_id=i.id).count() + Weibo.objects.filter(
+ organization_id=i.id).count() + Toutiao.objects.filter(organization_id=i.id).count() + Qita.objects.filter(
+ organization_id=i.id).count()
+ res.append(o)
+
+ return render(request, 'management/organization-management.html', {"organization": organization, 'res': res})
+
+
+def organization_delete(request, pk):
+ organization = Organization.objects.get(id=pk)
+ organization.delete()
+ messages.success(request, '删除成功')
+ return HttpResponseRedirect('/management/organization/management/')
+
+
+def organization_update(request, pk):
+ organization = Organization.objects.get(id=pk)
+ organizationtype = Organizationtype.objects.all()
+ if request.method == 'POST':
+ name = request.POST.get('name')
+ image = request.FILES.get('image')
+ organizationtype = request.POST.get('organizationtype')
+ province = request.POST.get('province')
+ if province != '' and province.isdigit():
+ province_r = Area_code_2020.objects.get(code=province).name
+ else:
+ province_r = province
+ city = request.POST.get('city')
+ if city != '' and city.isdigit():
+ city_r = Area_code_2020.objects.get(code=city).name
+ else:
+ city_r = city
+ district = request.POST.get('district')
+ if district != '' and district.isdigit():
+ district_r = Area_code_2020.objects.get(code=district).name
+ else:
+ district_r = district
+ town = request.POST.get('town')
+ if town != '' and town.isdigit():
+ town_r = Area_code_2020.objects.get(code=town).name
+ else:
+ town_r = town
+ village = request.POST.get('village')
+ if village != '' and village.isdigit():
+ village_r = Area_code_2020.objects.get(code=village).name
+ else:
+ village_r = village
+ if name is not None:
+ if image is not None:
+ Organization.objects.filter(id=pk).update(name=name, organizationtype_id=organizationtype,
+ province=province_r, cities=city_r, district=district_r,
+ town=town_r, village=village_r)
+ o = Organization.objects.get(id=pk)
+ o.image = image
+ o.save()
+ messages.success(request, '修改成功')
+ return HttpResponseRedirect('/management/organization/management/')
+ else:
+ Organization.objects.filter(id=pk).update(name=name, organizationtype_id=organizationtype,
+ province=province_r, cities=city_r, district=district_r,
+ town=town_r, village=village_r)
+ messages.success(request, '修改成功')
+ return HttpResponseRedirect('/management/organization/management/')
+ return render(request, 'management/organization-management-update.html',
+ {'organization': organization, 'organizationtype': organizationtype})
+
+
+def organization_create(request):
+ organizationtype = Organizationtype.objects.all()
+ if request.method == 'POST':
+ name = request.POST.get('name')
+ image = request.FILES.get('image')
+ organizationtype = request.POST.get('organizationtype')
+ province = request.POST.get('province')
+ if province != '':
+ province_r = Area_code_2020.objects.get(code=province).name
+ else:
+ messages.error(request, '请选择行政区划')
+ return HttpResponseRedirect('/management/organization/create/')
+ city = request.POST.get('city')
+ if city != '':
+ city_r = Area_code_2020.objects.get(code=city).name
+ else:
+ city_r = city
+ district = request.POST.get('district')
+ if district != '':
+ district_r = Area_code_2020.objects.get(code=district).name
+ else:
+ district_r = district
+ town = request.POST.get('town')
+ if town != '':
+ town_r = Area_code_2020.objects.get(code=town).name
+ else:
+ town_r = town
+ village = request.POST.get('village')
+ if village != '':
+ village_r = Area_code_2020.objects.get(code=village).name
+ else:
+ village_r = village
+ print(province, city)
+ if name is not None:
+ organization = Organization(name=name, image=image, organizationtype_id=organizationtype,
+ province=province_r, cities=city_r, district=district_r, town=town_r,
+ village=village_r)
+ organization.save()
+ messages.success(request, '添加成功')
+ else:
+ messages.error(request, '单位名不能为空')
+ return HttpResponseRedirect('/management/organization/management/')
+ return render(request, 'management/organization-management-create.html', {'organizationtype': organizationtype})
+
+
+def newmedia_management_create_menu(request):
+ return render(request, 'management/newmedia-management-create-menu.html')
+
+
+def newmedia_management_create_weixin(request):
+ WEIXIN_STATUS_CHOICES = Weixin.WEIXIN_STATUS_CHOICES
+ weixin_status_choices_list = []
+ for w in WEIXIN_STATUS_CHOICES:
+ weixin_status_choices_list.append(list(w)[1])
+ organization = Organization.objects.all()
+ if request.method == 'POST':
+ code = request.POST.get('code')
+ weixinid = request.POST.get('weixinid')
+ alias = request.POST.get('alias')
+ image = request.FILES.get('image')
+ organization = request.POST.get('organization')
+ status = request.POST.get('status')
+ if code is not None:
+ if organization is not None:
+ if image is not None:
+ weixin = Weixin(code=code, weixinid=weixinid, alias=alias, image=image,
+ organization_id=organization, status=status)
+ weixin.save()
+ messages.success(request, '创建成功')
+ return HttpResponseRedirect('/management/newmedia/management/create/weixin/')
+ else:
+ weixin = Weixin(code=code, weixinid=weixinid, alias=alias, image='weixin.png',
+ organization_id=organization, status=status)
+ weixin.save()
+ messages.success(request, '创建成功')
+ return HttpResponseRedirect('/management/newmedia/management/create/weixin/')
+ else:
+ messages.success(request, "请选择单位")
+ return render(request, 'management/newmedia-management-create-weixin.html',
+ {'weixin_status_choices_list': weixin_status_choices_list, "organization": organization})
+ else:
+ messages.success(request, "微信公众号不能为空")
+ return render(request, 'management/newmedia-management-create-weixin.html',
+ {'weixin_status_choices_list': weixin_status_choices_list, "organization": organization})
+ return render(request, 'management/newmedia-management-create-weixin.html',
+ {'weixin_status_choices_list': weixin_status_choices_list, "organization": organization})
+
+
+def newmedia_management_create_weibo(request):
+ WEIBO_STATUS_CHOICES = Weibo.WEIBO_STATUS_CHOICES
+ weibo_status_choices_list = []
+ for w in WEIBO_STATUS_CHOICES:
+ weibo_status_choices_list.append(list(w)[1])
+ organization = Organization.objects.all()
+ if request.method == 'POST':
+ code = request.POST.get('code')
+ weiboid = request.POST.get('weiboid')
+ print(str(weiboid) + "11111111111111111111111111111111111111")
+ alias = request.POST.get('alias')
+ image = request.FILES.get('image')
+ organization = request.POST.get('organization')
+ status = request.POST.get('status')
+ if code is not None:
+ if organization is not None:
+ if image is not None:
+ weibo = Weibo(code=code, weiboid=weiboid, alias=alias, image=image,
+ organization_id=organization, status=status)
+ weibo.save()
+ messages.success(request, '创建成功')
+ return HttpResponseRedirect('/management/newmedia/management/create/weibo/')
+ else:
+ weibo = Weibo(code=code, weiboid=weiboid, alias=alias, image='weibo.png',
+ organization_id=organization, status=status)
+ weibo.save()
+ messages.success(request, '创建成功')
+ return HttpResponseRedirect('/management/newmedia/management/create/weibo/')
+ else:
+ messages.success(request, "请选择单位")
+ return render(request, 'management/newmedia-management-create-weibo.html',
+ {'weibo_status_choices_list': weibo_status_choices_list, "organization": organization})
+ else:
+ messages.success(request, "微博号不能为空")
+ return render(request, 'management/newmedia-management-create-weibo.html',
+ {'weixin_status_choices_list': weibo_status_choices_list, "organization": organization})
+ return render(request, 'management/newmedia-management-create-weibo.html',
+ {'weibo_status_choices_list': weibo_status_choices_list, "organization": organization})
+
+
+def newmedia_management_create_toutiao(request):
+ TOUTIAO_STATUS_CHOICES = Toutiao.TOUTIAO_STATUS_CHOICES
+ toutiao_status_choices_list = []
+ for w in TOUTIAO_STATUS_CHOICES:
+ toutiao_status_choices_list.append(list(w)[1])
+ organization = Organization.objects.all()
+ if request.method == 'POST':
+ code = request.POST.get('code')
+ toutiaoid = request.POST.get('toutiaoid')
+ alias = request.POST.get('alias')
+ image = request.FILES.get('image')
+ organization = request.POST.get('organization')
+ status = request.POST.get('status')
+ if code is not None:
+ if organization is not None:
+ if image is not None:
+ toutiao = Toutiao(code=code, toutiaoid=toutiaoid, alias=alias, image=image,
+ organization_id=organization, status=status)
+ toutiao.save()
+ messages.success(request, '创建成功')
+ return HttpResponseRedirect('/management/newmedia/management/create/toutiao/')
+ else:
+ toutiao = Toutiao(code=code, toutiaoid=toutiaoid, alias=alias, image='toutiao.png',
+ organization_id=organization, status=status)
+ toutiao.save()
+ messages.success(request, '创建成功')
+ return HttpResponseRedirect('/management/newmedia/management/create/toutiao/')
+ else:
+ messages.success(request, "请选择单位")
+ return render(request, 'management/newmedia-management-create-toutiao.html',
+ {'toutiao_status_choices_list': toutiao_status_choices_list,
+ "organization": organization})
+ else:
+ messages.success(request, "头条号不能为空")
+ return render(request, 'management/newmedia-management-create-toutiao.html',
+ {'toutiao_status_choices_list': toutiao_status_choices_list, "organization": organization})
+ return render(request, 'management/newmedia-management-create-toutiao.html',
+ {'toutiao_status_choices_list': toutiao_status_choices_list, "organization": organization})
+
+
+def newmedia_management_create_qita(request):
+ QITA_STATUS_CHOICES = Qita.QITA_STATUS_CHOICES
+ qita_status_choices_list = []
+ for w in QITA_STATUS_CHOICES:
+ qita_status_choices_list.append(list(w)[1])
+ organization = Organization.objects.all()
+ if request.method == 'POST':
+ type = request.POST.get('type')
+ name = request.POST.get('name')
+ qitaid = request.POST.get('qitaid')
+ alias = request.POST.get('alias')
+ image = request.FILES.get('image')
+ organization = request.POST.get('organization')
+ status = request.POST.get('status')
+ if name is not None:
+ if organization is not None:
+ if image is not None:
+ qita = Qita(type=type, name=name, qitaid=qitaid, alias=alias, image=image,
+ organization_id=organization, status=status)
+ qita.save()
+ messages.success(request, '创建成功')
+ return HttpResponseRedirect('/management/newmedia/management/create/qita/')
+ else:
+ qita = Qita(type=type, name=name, qitaid=qitaid, alias=alias, image='qita.png',
+ organization_id=organization, status=status)
+ qita.save()
+ messages.success(request, '创建成功')
+ return HttpResponseRedirect('/management/newmedia/management/create/qita/')
+ else:
+ messages.success(request, "请选择单位")
+ return render(request, 'management/newmedia-management-create-qita.html',
+ {'qita_status_choices_list': qita_status_choices_list, "organization": organization})
+ else:
+ messages.success(request, "新媒体名称不能为空")
+ return render(request, 'management/newmedia-management-create-qita.html',
+ {'qita_status_choices_list': qita_status_choices_list, "organization": organization})
+ return render(request, 'management/newmedia-management-create-qita.html',
+ {'qita_status_choices_list': qita_status_choices_list, "organization": organization})
+
+
+def newmedia_management_edit_menu(request):
+ return render(request, 'management/newmedia-management-edit-menu.html')
+
+
+def newmedia_management_edit_weixin(request):
+ weixin = Weixin.objects.all().order_by('-created')
+ paginator = Paginator(weixin, 6)
+ page = int(request.GET.get('page', 1))
+ try:
+ weixin = paginator.page(page)
+ except PageNotAnInteger:
+ weixin = paginator.page(1)
+ except EmptyPage:
+ weixin = paginator.page(paginator.num_pages)
+ res = []
+ for w in weixin:
+ o = dict()
+ o['id'] = str(w.id)
+ o['image'] = w.image
+ o['code'] = w.code
+ o['weixinid'] = w.weixinid
+ o['organization'] = w.organization.name
+ o['organization_type'] = w.organization.organizationtype.organizationtype
+ o['administrativedivision'] = str(w.organization.province) + '-' + str(w.organization.cities) + '-' + str(
+ w.organization.district) + '-' + str(w.organization.town) + '-' + str(w.organization.village)
+ o['status'] = w.status
+ res.append(o)
+ return render(request, 'management/newmedia-management-edit-weixin.html', {'weixin': weixin, 'res': res})
+
+
+def newmedia_management_edit_weibo(request):
+ weibo = Weibo.objects.all().order_by('-created')
+ paginator = Paginator(weibo, 6)
+ page = int(request.GET.get('page', 1))
+ try:
+ weibo = paginator.page(page)
+ except PageNotAnInteger:
+ weibo = paginator.page(1)
+ except EmptyPage:
+ weibo = paginator.page(paginator.num_pages)
+ res = []
+ for w in weibo:
+ o = dict()
+ o['id'] = str(w.id)
+ o['image'] = w.image
+ o['code'] = w.code
+ o['weiboid'] = w.weiboid
+ o['organization'] = w.organization.name
+ o['organization_type'] = w.organization.organizationtype.organizationtype
+ o['administrativedivision'] = str(w.organization.province) + '-' + str(w.organization.cities) + '-' + str(
+ w.organization.district) + '-' + str(w.organization.town) + '-' + str(w.organization.village)
+ o['status'] = w.status
+ res.append(o)
+ return render(request, 'management/newmedia-management-edit-weibo.html', {'weibo': weibo, 'res': res})
+
+
+def newmedia_management_edit_toutiao(request):
+ toutiao = Toutiao.objects.all().order_by('-created')
+ paginator = Paginator(toutiao, 6)
+ page = int(request.GET.get('page', 1))
+ try:
+ toutiao = paginator.page(page)
+ except PageNotAnInteger:
+ toutiao = paginator.page(1)
+ except EmptyPage:
+ toutiao = paginator.page(paginator.num_pages)
+ res = []
+ for w in toutiao:
+ o = dict()
+ o['id'] = str(w.id)
+ o['image'] = w.image
+ o['code'] = w.code
+ o['toutiaoid'] = w.toutiaoid
+ o['organization'] = w.organization.name
+ o['organization_type'] = w.organization.organizationtype.organizationtype
+ o['administrativedivision'] = str(w.organization.province) + '-' + str(w.organization.cities) + '-' + str(
+ w.organization.district) + '-' + str(w.organization.town) + '-' + str(w.organization.village)
+ o['status'] = w.status
+ res.append(o)
+ return render(request, 'management/newmedia-management-edit-toutiao.html', {'toutiao': toutiao, 'res': res})
+
+
+def newmedia_management_edit_qita(request):
+ qita = Qita.objects.all().order_by('-created')
+ paginator = Paginator(qita, 6)
+ page = int(request.GET.get('page', 1))
+ try:
+ qita = paginator.page(page)
+ except PageNotAnInteger:
+ qita = paginator.page(1)
+ except EmptyPage:
+ qita = paginator.page(paginator.num_pages)
+ res = []
+ for w in qita:
+ o = dict()
+ o['id'] = str(w.id)
+ o['image'] = w.image
+ o['type'] = w.type
+ o['name'] = w.name
+ o['qitaid'] = w.qitaid
+ o['organization'] = w.organization.name
+ o['organization_type'] = w.organization.organizationtype.organizationtype
+ o['administrativedivision'] = str(w.organization.province) + '-' + str(w.organization.cities) + '-' + str(
+ w.organization.district) + '-' + str(w.organization.town) + '-' + str(w.organization.village)
+ o['status'] = w.status
+ res.append(o)
+ return render(request, 'management/newmedia-management-edit-qita.html', {'qita': qita, 'res': res})
+
+
+def newmedia_management_update_weixin(request, pk):
+ WEIXIN_STATUS_CHOICES = Weixin.WEIXIN_STATUS_CHOICES
+ weixin_status_choices_list = []
+ for w in WEIXIN_STATUS_CHOICES:
+ weixin_status_choices_list.append(list(w)[1])
+ weixin = Weixin.objects.get(id=pk)
+ organization = Organization.objects.all()
+ if request.method == 'POST':
+ code = request.POST.get('code')
+ weixinid = request.POST.get('weixinid')
+ alias = request.POST.get('alias')
+ image = request.FILES.get('image')
+ organization = request.POST.get('organization')
+ status = request.POST.get('status')
+ if code is not None:
+ if organization is not None:
+ if image is not None:
+ Weixin.objects.filter(id=pk).update(code=code, weixinid=weixinid, alias=alias,
+ organization_id=organization, status=status)
+ weixin.image = image
+ weixin.save()
+ messages.success(request, '修改成功')
+ return HttpResponseRedirect('/management/newmedia/management/edit/weixin/')
+ else:
+ Weixin.objects.filter(id=pk).update(code=code, weixinid=weixinid, alias=alias,
+ organization_id=organization, status=status)
+ messages.success(request, '修改成功')
+ return HttpResponseRedirect('/management/newmedia/management/edit/weixin/')
+ else:
+ messages.success(request, "请选择单位")
+ return render(request, 'management/newmedia-management-update-weixin.html',
+ {'weixin': weixin, 'organization': organization,
+ 'weixin_status_choices_list': weixin_status_choices_list})
+ else:
+ messages.success(request, "微信公众号不能为空")
+ return render(request, 'management/newmedia-management-update-weixin.html',
+ {'weixin': weixin, 'organization': organization,
+ 'weixin_status_choices_list': weixin_status_choices_list})
+ return render(request, 'management/newmedia-management-update-weixin.html',
+ {'weixin': weixin, 'organization': organization,
+ 'weixin_status_choices_list': weixin_status_choices_list})
+
+
+def newmedia_management_update_weibo(request, pk):
+ WEIBO_STATUS_CHOICES = Weibo.WEIBO_STATUS_CHOICES
+ weibo_status_choices_list = []
+ for w in WEIBO_STATUS_CHOICES:
+ weibo_status_choices_list.append(list(w)[1])
+ weibo = Weibo.objects.get(id=pk)
+ organization = Organization.objects.all()
+ if request.method == 'POST':
+ code = request.POST.get('code')
+ weiboid = request.POST.get('weiboid')
+ alias = request.POST.get('alias')
+ image = request.FILES.get('image')
+ organization = request.POST.get('organization')
+ status = request.POST.get('status')
+ if code is not None:
+ if organization is not None:
+ if image is not None:
+ Weibo.objects.filter(id=pk).update(code=code, weiboid=weiboid, alias=alias,
+ organization_id=organization, status=status)
+ weibo.image = image
+ weibo.save()
+ messages.success(request, '修改成功')
+ return HttpResponseRedirect('/management/newmedia/management/edit/weibo/')
+ else:
+ Weibo.objects.filter(id=pk).update(code=code, weiboid=weiboid, alias=alias,
+ organization_id=organization, status=status)
+ messages.success(request, '修改成功')
+ return HttpResponseRedirect('/management/newmedia/management/edit/weibo/')
+ else:
+ messages.success(request, "请选择单位")
+ return render(request, 'management/newmedia-management-update-weibo.html',
+ {'weibo': weibo, 'organization': organization,
+ 'weibo_status_choices_list': weibo_status_choices_list})
+ else:
+ messages.success(request, "微博号不能为空")
+ return render(request, 'management/newmedia-management-update-weibo.html',
+ {'weibo': weibo, 'organization': organization,
+ 'weibo_status_choices_list': weibo_status_choices_list})
+ return render(request, 'management/newmedia-management-update-weibo.html',
+ {'weibo': weibo, 'organization': organization,
+ 'weibo_status_choices_list': weibo_status_choices_list})
+
+
+def newmedia_management_update_toutiao(request, pk):
+ TOUTIAO_STATUS_CHOICES = Toutiao.TOUTIAO_STATUS_CHOICES
+ toutiao_status_choices_list = []
+ for w in TOUTIAO_STATUS_CHOICES:
+ toutiao_status_choices_list.append(list(w)[1])
+ toutiao = Toutiao.objects.get(id=pk)
+ organization = Organization.objects.all()
+ if request.method == 'POST':
+ code = request.POST.get('code')
+ toutiaoid = request.POST.get('toutiaoid')
+ alias = request.POST.get('alias')
+ image = request.FILES.get('image')
+ organization = request.POST.get('organization')
+ status = request.POST.get('status')
+ if code is not None:
+ if organization is not None:
+ if image is not None:
+ Toutiao.objects.filter(id=pk).update(code=code, toutiaoid=toutiaoid, alias=alias,
+ organization_id=organization, status=status)
+ toutiao.image = image
+ toutiao.save()
+ messages.success(request, '修改成功')
+ return HttpResponseRedirect('/management/newmedia/management/edit/toutiao/')
+ else:
+ Toutiao.objects.filter(id=pk).update(code=code, toutiaoid=toutiaoid, alias=alias,
+ organization_id=organization, status=status)
+ messages.success(request, '修改成功')
+ return HttpResponseRedirect('/management/newmedia/management/edit/toutiao/')
+ else:
+ messages.success(request, "请选择单位")
+ return render(request, 'management/newmedia-management-update-toutiao.html',
+ {'toutiao': toutiao, 'organization': organization,
+ 'toutiao_status_choices_list': toutiao_status_choices_list})
+ else:
+ messages.success(request, "头条号不能为空")
+ return render(request, 'management/newmedia-management-update-toutiao.html',
+ {'toutiao': toutiao, 'organization': organization,
+ 'toutiao_status_choices_list': toutiao_status_choices_list})
+ return render(request, 'management/newmedia-management-update-toutiao.html',
+ {'toutiao': toutiao, 'organization': organization,
+ 'toutiao_status_choices_list': toutiao_status_choices_list})
+
+
+def newmedia_management_update_qita(request, pk):
+ QITA_STATUS_CHOICES = Qita.QITA_STATUS_CHOICES
+ qita_status_choices_list = []
+ for w in QITA_STATUS_CHOICES:
+ qita_status_choices_list.append(list(w)[1])
+ organization = Organization.objects.all()
+ qita = Qita.objects.get(id=pk)
+ if request.method == 'POST':
+ type = request.POST.get('type')
+ name = request.POST.get('name')
+ qitaid = request.POST.get('qitaid')
+ alias = request.POST.get('alias')
+ image = request.FILES.get('image')
+ organization = request.POST.get('organization')
+ status = request.POST.get('status')
+ if name is not None:
+ if organization is not None:
+ if image is not None:
+ Qita.objects.filter(id=pk).update(type=type, name=name, qitaid=qitaid, alias=alias,
+ organization_id=organization, status=status)
+ qita.image = image
+ qita.save()
+ messages.success(request, '修改成功')
+ return HttpResponseRedirect('/management/newmedia/management/edit/qita/')
+ else:
+ Qita.objects.filter(id=pk).update(type=type, name=name, qitaid=qitaid, alias=alias,
+ organization_id=organization, status=status)
+ messages.success(request, '修改成功')
+ return HttpResponseRedirect('/management/newmedia/management/edit/qita/')
+ else:
+ messages.success(request, "请选择单位")
+ return render(request, 'management/newmedia-management-update-qita.html',
+ {'qita': qita, 'organization': organization,
+ 'qita_status_choices_list': qita_status_choices_list})
+ else:
+ messages.success(request, "新媒体名称不能为空")
+ return render(request, 'management/newmedia-management-update-qita.html',
+ {'qita': qita, 'organization': organization,
+ 'qita_status_choices_list': qita_status_choices_list})
+ return render(request, 'management/newmedia-management-update-qita.html',
+ {'qita': qita, 'organization': organization,
+ 'qita_status_choices_list': qita_status_choices_list})
+
+
+def newmedia_management_delete_weixin(request, pk):
+ weixin = Weixin.objects.get(id=pk)
+ weixin.delete()
+ messages.success(request, "删除成功")
+ return HttpResponseRedirect('/management/newmedia/management/edit/weixin/')
+
+
+def newmedia_management_delete_weibo(request, pk):
+ weibo = Weibo.objects.get(id=pk)
+ weibo.delete()
+ messages.success(request, "删除成功")
+ return HttpResponseRedirect('/management/newmedia/management/edit/weibo/')
+
+
+def newmedia_management_delete_toutiao(request, pk):
+ toutiao = Toutiao.objects.get(id=pk)
+ toutiao.delete()
+ messages.success(request, "删除成功")
+ return HttpResponseRedirect('/management/newmedia/management/edit/toutiao/')
+
+
+def newmedia_management_delete_qita(request, pk):
+ qita = Qita.objects.get(id=pk)
+ qita.delete()
+ messages.success(request, "删除成功")
+ return HttpResponseRedirect('/management/newmedia/management/edit/qita/')
diff --git a/static/upload/cover/20181201110659913.PNG b/media/upload/cover/20181201110659913.PNG
similarity index 100%
rename from static/upload/cover/20181201110659913.PNG
rename to media/upload/cover/20181201110659913.PNG
diff --git a/static/upload/cover/20181201110659913_85e25PV.PNG b/media/upload/cover/20181201110659913_85e25PV.PNG
similarity index 100%
rename from static/upload/cover/20181201110659913_85e25PV.PNG
rename to media/upload/cover/20181201110659913_85e25PV.PNG
diff --git a/static/upload/cover/20181201110659913_ie84dq3.PNG b/media/upload/cover/20181201110659913_ie84dq3.PNG
similarity index 100%
rename from static/upload/cover/20181201110659913_ie84dq3.PNG
rename to media/upload/cover/20181201110659913_ie84dq3.PNG
diff --git a/static/upload/cover/weibo.png b/media/upload/cover/weibo.png
similarity index 100%
rename from static/upload/cover/weibo.png
rename to media/upload/cover/weibo.png
diff --git a/static/upload/cover/weixin.png b/media/upload/cover/weixin.png
similarity index 100%
rename from static/upload/cover/weixin.png
rename to media/upload/cover/weixin.png
diff --git a/static/upload/cover/weixin_T3Y4A36.png b/media/upload/cover/weixin_T3Y4A36.png
similarity index 100%
rename from static/upload/cover/weixin_T3Y4A36.png
rename to media/upload/cover/weixin_T3Y4A36.png
diff --git a/static/upload/cover/weixin_TC0D6fQ.png b/media/upload/cover/weixin_TC0D6fQ.png
similarity index 100%
rename from static/upload/cover/weixin_TC0D6fQ.png
rename to media/upload/cover/weixin_TC0D6fQ.png
diff --git a/static/upload/cover/微信图片_20200724112643.jpg b/media/upload/cover/微信图片_20200724112643.jpg
similarity index 100%
rename from static/upload/cover/微信图片_20200724112643.jpg
rename to media/upload/cover/微信图片_20200724112643.jpg
diff --git a/static/upload/cover/微信图片_20200724112643_deab8x0.jpg b/media/upload/cover/微信图片_20200724112643_deab8x0.jpg
similarity index 100%
rename from static/upload/cover/微信图片_20200724112643_deab8x0.jpg
rename to media/upload/cover/微信图片_20200724112643_deab8x0.jpg
diff --git a/static/upload/groupimage/20181201110659913.PNG b/media/upload/groupimage/20181201110659913.PNG
similarity index 100%
rename from static/upload/groupimage/20181201110659913.PNG
rename to media/upload/groupimage/20181201110659913.PNG
diff --git a/static/upload/groupimage/微信图片_20200724112643.jpg b/media/upload/groupimage/微信图片_20200724112643.jpg
similarity index 100%
rename from static/upload/groupimage/微信图片_20200724112643.jpg
rename to media/upload/groupimage/微信图片_20200724112643.jpg
diff --git a/static/upload/profile/20181201110659913.PNG b/media/upload/profile/20181201110659913.PNG
similarity index 100%
rename from static/upload/profile/20181201110659913.PNG
rename to media/upload/profile/20181201110659913.PNG
diff --git a/static/upload/profile/微信图片_20200724112643.jpg b/media/upload/profile/微信图片_20200724112643.jpg
similarity index 100%
rename from static/upload/profile/微信图片_20200724112643.jpg
rename to media/upload/profile/微信图片_20200724112643.jpg
diff --git a/media/upload/profile/微信图片_20200724112643_4e2NSOO.jpg b/media/upload/profile/微信图片_20200724112643_4e2NSOO.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..00f7364e8d1438e840bfaca6b494595153ce9bee
GIT binary patch
literal 23938
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
Z&_h6gdQ=U&713{I6cB*N-2eOG{{Vlvcc=gW
literal 0
HcmV?d00001
diff --git a/media/upload/profile/微信图片_20200724112643_6VlW7BD.jpg b/media/upload/profile/微信图片_20200724112643_6VlW7BD.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..00f7364e8d1438e840bfaca6b494595153ce9bee
GIT binary patch
literal 23938
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