#用户登录、数据库修改

This commit is contained in:
Bob 2020-08-23 12:06:04 +08:00
parent 788ff23716
commit 1aabd1a5c6
52 changed files with 6798 additions and 6607 deletions

View File

@ -136,7 +136,7 @@ STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
STATIC_ROOT = '/var/www/p3/newmediamonitoring/static/'
MEDIA_URL = '/media/'
MEDIA_URL = '/static/media/'
MEDIA_ROOT = '/var/www/p3/newmediamonitoring/media/'
"""用户模块扩展部分"""

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

@ -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/')

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

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