move mod_wsgi to passenger_wsgi

This commit is contained in:
baoliang 2020-08-24 22:35:47 +08:00
commit 8656fc52a1
58 changed files with 6941 additions and 6746 deletions

View File

@ -18,11 +18,3 @@ from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'NewMediaMonitoring.settings')
sys.path.append("/var/www/p3/newmediamonitoring/current")
application = get_wsgi_application()
try:
application = get_wsgi_application()
except Exception:
# Error loading applications
if 'mod_wsgi' in sys.modules:
traceback.print_exc()
os.kill(os.getpid(), signal.SIGINT)
time.sleep(2.5)

View File

@ -18,3 +18,9 @@ source .venv/bin/activate
python manage.py make migrations
python manage.py migrate
```
# 查看服务器apache 内存使用情况
```shell
sudo /usr/sbin/passenger-memory-stats
```

View File

@ -3,7 +3,17 @@ 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)
@ -55,17 +65,7 @@ class Group_user(models.Model):
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)
@ -104,6 +104,8 @@ class Userprofile(models.Model):
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):

View File

@ -352,7 +352,9 @@
</li>
<li class="chat-toggle-wrapper">
{# <a href="#" data-toggle="chatbar" class="toggle_chat">#}
<span>{{ user.first_name }}</span>
{% for i in user.userprofile_set.all %}
<span>{{ i.name }}</span>
{% endfor %}
{# <i class="fa fa-comments"></i>#}
{# <span class="badge badge-warning">9</span>#}
{# </a>#}

View File

@ -29,8 +29,14 @@
<ul class='wraplist'>
<li class="open">
<li class="">
<a href="{% url 'user-management-update' user.id %}">
<i class="fa fa-th"></i>
<span class="title">新媒体舆情</span>
</a>
</li>
{# <li class="open">#}
<li class="">
<a href="javascript:;">
<i class="fa fa-map-marker"></i>
<span class="title">发布时效性监测</span>
@ -44,13 +50,13 @@
</li>
<li class="">
<a href="">
<i class="fa fa-dashboard"></i>
<i class="fa fa-bar-chart"></i>
<span class="title">错别字监测</span>
</a>
</li>
<li class="">
<a href="javascript:;">
<i class="fa fa-map-marker"></i>
<i class="fa fa-folder-open"></i>
<span class="title">敏感信息监测</span>
<span class="arrow "></span>
</a>
@ -125,34 +131,34 @@
</li>
<li class="">
<a href="{% url 'user-management-management' %}">
<i class="fa fa-dashboard"></i>
<i class="fa fa-columns"></i>
<span class="title">用户管理</span>
</a>
</li>
<li class="">
<a href="">
<a href="{% url 'user-management-update' user.id %}">
<i class="fa fa-dashboard"></i>
<span class="title">系统设置</span>
</a>
</li>
<li class="">
<a href="javascript:;">
<i class="fa fa-columns"></i>
<span class="title">工作首页</span>
<span class="arrow "></span>
</a>
<ul class="sub-menu">
<li>
<a class="" href="">工作列表</a>
</li>
<li>
<a class="" href="">考勤管理</a>
</li>
<li>
<a class="" href="">新闻管理</a>
</li>
</ul>
</li>
{# <li class="">#}
{# <a href="javascript:;">#}
{# <i class="fa fa-columns"></i>#}
{# <span class="title">工作首页</span>#}
{# <span class="arrow "></span>#}
{# </a>#}
{# <ul class="sub-menu">#}
{# <li>#}
{# <a class="" href="">工作列表</a>#}
{# </li>#}
{# <li>#}
{# <a class="" href="">考勤管理</a>#}
{# </li>#}
{# <li>#}
{# <a class="" href="">新闻管理</a>#}
{# </li>#}
{# </ul>#}
{# </li>#}
{# <li class=""><a href="javascript:;"> <i class="fa fa-folder-open"></i> <span class="title">Menu Levels</span>#}

View File

@ -51,7 +51,17 @@
<!-- START CONTENT -->
<section id="main-content" class=" ">
<section class="wrapper" style='margin-top:60px;display:inline-block;width:100%;padding:15px 0 0 15px;'>
{% if messages %}
<div class="alert alert-success alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert">
<span aria-hidden="true">&times;</span>
<span class="sr-only">Close</span>
</button>
{% for message in messages %}
{{ message }}.<br/>
{% endfor %}
</div>
{% endif %}
<div class='col-lg-12 col-md-12 col-sm-12 col-xs-12'>
<div class="page-title">

View File

@ -59,7 +59,7 @@
<form name="loginform" id="loginform" action="{% url 'dashboard-login' %}" method="post">{% csrf_token %}
<p>
<label for="user_login">账号(您的邮箱、手机号或用户名)<br/>
<label for="user_login">账号(您注册的手机号)<br/>
<input type="text" name="username" id="user_login" class="input" size="20" placeholder="请输入账号"/></label>
</p>
<p>

View File

@ -87,12 +87,12 @@
</p>
<p>
<label for="phone">电话<br/>
<input type="text" name="phone" id="user_login" class="input" value="" size="20"/></label>
</p>
<p>
<label for="username">用户名<br/>
<input type="text" name="username" id="user_login" class="input" value="" size="20"/></label>
</p>
{# <p>#}
{# <label for="username">用户名<br/>#}
{# <input type="text" name="username" id="user_login" class="input" value="" size="20"/></label>#}
{# </p>#}
<p>
<label for="password">密码<br/>
<input type="password" name="password" id="user_pass" class="input" value="" size="20"/></label>

View File

@ -48,10 +48,11 @@ 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)
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)
@ -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)
@ -72,7 +73,7 @@ def register(request):
password = None
confirm_password = None
name = None
phone = None
# phone = None
image = None
flag = False
o = None
@ -93,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:
@ -115,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')
@ -136,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/')

View File

@ -0,0 +1,119 @@
{% extends 'dashboard/base/base.html' %}
{% load static %}
{% block content %}
<body class=" ">
<!-- START TOPBAR -->
<!-- START CONTAINER -->
<div class="page-container row-fluid">
<div class="page-sidebar ">
{% include 'dashboard/base/left.html' %}
</div>
<section id="main-content" class=" ">
<section class="wrapper" style='margin-top:60px;display:inline-block;width:100%;padding:15px 0 0 15px;'>
{% if messages %}
<div class="alert alert-success alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert">
<span aria-hidden="true">&times;</span>
<span class="sr-only">Close</span>
</button>
{% for message in messages %}
{{ message }}.<br/>
{% endfor %}
</div>
{% endif %}
<div class='col-lg-12 col-md-12 col-sm-12 col-xs-12'>
<div class="page-title">
<div class="pull-left">
<h1 class="title">系统设置</h1></div>
</div>
</div>
<div class="clearfix"></div>
<div class="col-lg-12 col-md-12 col-xs-12 col-sm-12">
<section class="box ">
<header class="panel_header">
<h2 class="title pull-left">用户信息</h2>
</header>
<div class="content-body">
<div class="row">
<div class="col-md-8 col-sm-9 col-xs-10">
<form method="post"
action="{% url 'user-management-update' usee.id %}"
enctype="multipart/form-data">{% csrf_token %}
<div class="form-group">
<label class="form-label" for="organization">单位</label>
<div class="controls">
<select class="form-control" name="organization">
<option value="{{ userprofile.organization.id }}">{{ userprofile.organization.name }}</option>
{% for o in organization %}
<option value="{{ o.id }}">{{ o.name }}</option>
{% endfor %}
</select>
</div>
</div>
<div class="form-group">
<label class="form-label" for="name">姓名</label>
<div class="controls">
<input type="text" class="form-control" name="name"
value="{{ userprofile.name }}">
</div>
</div>
<div class="form-group">
<label class="form-label" for="email">邮箱</label>
<div class="controls">
<input type="text" class="form-control" name="email"
value="{{ usee.email }}">
</div>
</div>
<div class="form-group">
<label class="form-label" for="username">电话</label>
<div class="controls">
<input type="text" class="form-control" name="username"
value="{{ usee.username }}">
</div>
</div>
<div class="form-group">
<label class="form-label" for="image">图标
<div class="controls">
<input type="file" name="image"><img
src="{{ userprofile.image.url }}"
style="width: 80px;height: 80px;"
class="img-circle">
</div>
</label>
</div>
<div class="form-group">
<label for="passwordold">旧密码<br/>
<input type="password" name="passwordold" id="user_pass" class="input"
value="" size="20"/></label>
</div>
<div class="form-group">
<label for="passwordnew">新密码<br/>
<input type="password" name="passwordnew" id="user_pass" class="input"
value="" size="20"/></label>
</div>
<div class="form-group">
<label for="confirm_password">确认密码<br/>
<input type="password" name="confirm_password" id="user_pass1"
class="input" value=""
size="20"/></label>
</div>
<button type="submit" class="btn btn-primary" style="margin-top: 50px">提交修改
</button>
</form>
</div>
</div>
</div>
</section>
</div>
</section>
</section>
<div class="chatapi-windows "></div>
</div>
</body>
{% endblock %}

View File

@ -42,7 +42,7 @@
<tbody>
{% for u in userallinfo %}
<tr>
<td><img src="{{ u.image }}" style="width: 80px;height: 80px;"
<td><img src="{{ u.image.url }}" style="width: 80px;height: 80px;"
class="img-circle"></td>
<td style="vertical-align: middle;text-align: center">{{ u.name }}</td>
<td style="vertical-align: middle;text-align: center">{{ u.phone }}</td>

View File

@ -6,6 +6,7 @@ urlpatterns = [
# 用户管理
path('user/management/', views.user_management, name='user-management-management'),
path('user/delete/<str:pk>/', views.user_delete, name='user-management-delete'),
path('user/update/<str:pk>/', 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'),

View File

@ -1,6 +1,7 @@
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
@ -24,9 +25,9 @@ def user_management(request):
for u in userpaginator:
o = dict()
o['id'] = str(u.id)
o['image'] = u.userprofile_set.get(user_id=u.id).image.url
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.first_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
@ -48,6 +49,51 @@ def user_delete(request, pk):
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)
@ -707,6 +753,7 @@ def newmedia_management_update_weixin(request, pk):
{'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 = []
@ -836,26 +883,30 @@ def newmedia_management_update_qita(request, pk):
{'qita': qita, 'organization': organization,
'qita_status_choices_list': qita_status_choices_list})
def newmedia_management_delete_weixin(request,pk):
def newmedia_management_delete_weixin(request, pk):
weixin = Weixin.objects.get(id=pk)
weixin.delete()
messages.success(request,"删除成功")
messages.success(request, "删除成功")
return HttpResponseRedirect('/management/newmedia/management/edit/weixin/')
def newmedia_management_delete_weibo(request,pk):
def newmedia_management_delete_weibo(request, pk):
weibo = Weibo.objects.get(id=pk)
weibo.delete()
messages.success(request,"删除成功")
messages.success(request, "删除成功")
return HttpResponseRedirect('/management/newmedia/management/edit/weibo/')
def newmedia_management_delete_toutiao(request,pk):
def newmedia_management_delete_toutiao(request, pk):
toutiao = Toutiao.objects.get(id=pk)
toutiao.delete()
messages.success(request,"删除成功")
messages.success(request, "删除成功")
return HttpResponseRedirect('/management/newmedia/management/edit/toutiao/')
def newmedia_management_delete_qita(request,pk):
def newmedia_management_delete_qita(request, pk):
qita = Qita.objects.get(id=pk)
qita.delete()
messages.success(request,"删除成功")
messages.success(request, "删除成功")
return HttpResponseRedirect('/management/newmedia/management/edit/qita/')

View File

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

View File

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

View File

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

View File

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

View File

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 8.7 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

View File

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

View File

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

2
passenger_wsgi.py Normal file
View File

@ -0,0 +1,2 @@
import NewMediaMonitoring.wsgi
application = NewMediaMonitoring.wsgi.application

View File

@ -21,7 +21,7 @@ class VerifyCode(models.Model):
def is_in_progress(self):
now = datetime.datetime.now()
return snow <= self.timeouted
return now <= self.timeouted
def __str__(self):

View File

@ -1,9 +1,12 @@
from django.shortcuts import render
from django.http import HttpResponse, JsonResponse
from django.contrib.auth import get_user_model
from django.contrib.auth import get_user_model, authenticate, login
from django.views.decorators.csrf import csrf_exempt
from django_token.models import Token
import datetime
from .models import VerifyCode
from .utils import generate_code, send_sms_code
def index(request):
username = request.GET.get('username')

View File

@ -2340,7 +2340,7 @@ jQuery(function($) {
var i = 1,
$custom_droplist = $("#custom-droptable"),
example_dropzone = $("#customDZ").dropzone({
url: 'data/upload-file.php',
url: 'data/media-file.php',
// Events
addedfile: function(file) {

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
static/media/qita.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
static/media/toutiao.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

BIN
static/media/weibo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

BIN
static/media/weixin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB