python毕设 - 基于Django的问答社区管理系统

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
        })

项目分享

项目分享:完整源码 + 环境配置文档 + 设计使用手册

https://gitee.com/sinonfin/system-sharing

源码是经过本地编译可运行的,下载完成之后配置相应环境即可使用。源码功能都是经过老师肯定的,都能满足要求,有需要放心下载即可。源码是经过本地编译可运行的,下载完成之后配置相应环境即可使用。源码功能都是经过老师肯定的,都能满足要求,有需要放心下载即可。源码是经过本地编译可运行的,下载完成之后配置相应环境即可使用。源码功能都是经过老师肯定的,都能满足要求,有需要放心下载即可。源码是经过本地编译可运行的,下载完成之后配置相应环境即可使用。源码功能都是经过老师肯定的,都能满足要求,有需要放心下载即可。源码是经过本地编译可运行的,下载完成之后配置相应环境即可使用。源码功能都是经过老师肯定的,都能满足要求,有需要放心下载即可。源码是经过本地编译可运行的,下载完成之后配置相应环境即可使用。源码功能都是经过老师肯定的,都能满足要求,有需要放心下载即可。源码是经过本地编译可运行的,下载完成之后配置相应环境即可使用。源码功能都是经过老师肯定的,都能满足要求,有需要放心下载即可。源码是经过本地编译可运行的,下载完成之后配置相应环境即可使用。源码功能都是经过老师肯定的,都能满足要求,有需要放心下载即可。源码是经
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A毕设分享家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值