0 前言
Hi,大家好,今天给大家介绍一个python管理系统,大家可以用于自己的课设或毕设!
今天要分享的是:毕业设计 基于Django的问答社区管理系统
项目分享:
https://gitee.com/sinonfin/system-sharing
1 设计说明
在虚拟环境中运行命令“python manage.py run”启动项目。启动成功后,在浏览器中输入网址“127.0.0.1:9000”即可进入BBS问答社区首页。如图1所示。
在首页可以根据状态和标签过滤帖子列表,按状态查看如图2所示,按标签查看如图3所示。
选中一个帖子,单击可以查看帖子详情,如图4所示。
只有在用户登录后,才能发帖和回帖。所以需要用户先来注册,然后再登录。注册和登录在一个页面,单击“注册”按钮实现注册功能,单击“登录”按钮实现登录功能,如图5所示。
用户发帖页面如图6所示,回帖页面如图7所示。
答案采纳页面如图8所示,显示回复数量页面如图9所示。
部分相关源码
# -*- coding: utf-8 -*-
import base64
import uuid
import hashlib
from urllib import parse
from io import BytesIO
from tornado import gen
from handlers.base_handlers import BaseHandler
from database.sql_utils.auth import get_user_by_username, create_user
from utils.auth_code import get_pic_code
from utils.logger import logger
from utils.errcode import LOGIN_VCODE_ERR, PASSWORD_ERR, USERNAME_ERR, USER_EXISTS, USER_CREATE_ERR
class LoginHandler(BaseHandler):
"""登录控制器"""
@gen.coroutine
def get(self, *args, **kwargs): # 渲染页面
self.render('login.html')
@gen.coroutine
def post(self, *args, **kwargs): # 登录数据提交
sign = self.get_argument('sign', '') # 接收验证码标识参数
vcode = self.get_argument('vcode', '') # 接收验证码参数
username = self.get_argument('username', '') # 接收用户名参数
password = self.get_argument('password', '') # 接收密码参数
# 检测验证码是否正确
if self.get_secure_cookie(sign).decode('utf-8') != vcode: # 如果验证码错误
self.json_response(*LOGIN_VCODE_ERR) # 返回json格式的错误提示
raise gen.Return()
data = yield get_user_by_username(username) # 根据用户名获取数据
if not data: # 如果用户名不存在
self.json_response(*USERNAME_ERR) # 提示错误信息
raise gen.Return()
# 检测密码是否正确
if data.get('password') != hashlib.sha1(password.encode('utf-8')).hexdigest(): # 如果密码错误
self.json_response(*PASSWORD_ERR) # 返回json格式错误信息
raise gen.Return()
self.set_secure_cookie('auth-user', data.get('username', '')) # 设置Cookie
self.set_cookie('username', data.get('username', ''), expires_days=30) # 设置过期时间为30天
self.json_response(200, 'OK', {})
class LogoutHandler(BaseHandler):
"""
登出控制器
"""
@gen.coroutine
def get(self, *args, **kwargs):
next = self.get_argument('next', '') # 获取next参数
self.clear_cookie('auth-user') # 删除auth_user的Cookie值
self.clear_cookie('username') # 删除username的Cookie值
next = next + '?' + parse.urlencode({'m': '注销成功', 'e': 'success'}) # 拼接URL参数
self.redirect(next) # 跳转到注销页面
class SignupHandler(BaseHandler):
"""
注册控制器
"""
@gen.coroutine
def get(self, *args, **kwargs): # 渲染页面
self.render('login.html')
@gen.coroutine
def post(self, *args, **kwargs): # 提交注册数据
username = self.get_argument('username', '') # 接收用户名参数
password = self.get_argument('password', '') # 接收密码参数
vcode = self.get_argument('vcode', '') # 接收验证码参数
sign = self.get_argument('sign', '') # 接收验证码标识参数
# 检测验证码是否正确
if self.get_secure_cookie(sign).decode('utf-8') != vcode:
self.json_response(*LOGIN_VCODE_ERR)
raise gen.Return()
data = yield get_user_by_username(username) # 根据用户名获取用户信息
if data: # 如果用户已经存在
self.json_response(*USER_EXISTS) # 提示错误信息
raise gen.Return()
password = hashlib.sha1(password.encode('utf-8')).hexdigest() # 加密密码
result = yield create_user(username, password) # 将用户名和密码写入数据库
if not result: # 如果结果不存在,提示错误信息
self.json_response(*USER_CREATE_ERR)
raise gen.Return()
self.set_secure_cookie('auth-user', username) # 生成登录cookie
self.set_cookie('username', username, expires_days=30) # 设置过期时间
self.json_response(200, 'OK', {})
class AuthCodeHandler(BaseHandler):
"""
验证码控制器
"""
@gen.coroutine
def get(self, *args, **kwargs): # 获取验证码
b = BytesIO()
img, check = yield get_pic_code()
img.save(b, format='png')
vcode = base64.b64encode(b.getvalue())
sign = str(uuid.uuid1())
self.set_secure_cookie(sign, ''.join([str(i) for i in check]).lower(), expires_days=1/48)
self.json_response(200, 'OK', {
'vcode': vcode.decode('utf-8'),
'sign': sign
})
项目分享
项目分享:完整源码 + 环境配置文档 + 设计使用手册