团队作业(五):冲刺总结3

团队作业(五):冲刺总结3

项目名:电子公文传输系统
成员分工:熊悠越(前端开发)、罗杰逊+谷丰宇(后端开发)、陈夏林(数据库管理)、董准(系统测试与维护)
日期:2023.12.10

今日任务完成情况


前端部分代码

{% load static %}
<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="csrf-token" content="{{ csrf_token }}">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>公文传输系统</title>
    <link rel="stylesheet" href="{% static 'css/style-syspage.css' %}">
    <link rel="stylesheet" href="{% static 'css/style-newnavi.css' %}">
    <link rel="stylesheet" href="{% static 'css/sidebarContainer.css' %}">
    <link rel="stylesheet" href="{% static 'css/homepage.css' %}">
    <link rel="stylesheet" href="{% static 'css/textmanagerpage.css' %}">
    <link rel="stylesheet" href="{% static 'css/textpage.css' %}">
    <link rel="stylesheet" href="{% static 'css/usermanagerpage.css' %}">
    <script src="https://cdn.jsdelivr.net/npm/vue@3.0.11/dist/vue.global.prod.js"></script>
    <!-- 在<head>标签中引入Quill.js的CSS文件 -->
    <link href="https://cdn.quilljs.com/1.3.6/quill.snow.css" rel="stylesheet">

    <!-- 在<body>标签中引入Quill.js的JavaScript文件 -->
    <script src="https://cdn.quilljs.com/1.3.6/quill.js"></script>
</head>
<body>
    <div>
        <div class="navbar-top">
            <div class="menu-content">
            <div class="menu-icon">&#9776;</div>
            <input type="text" class="search-box" placeholder="搜索...">
            <div class="user-info">
                <span class="user-name">{{ username }},你来啦!</span>
                <input type="hidden" id="loggedInUserId" value="{{ user_id }}">
            </div>
        </div>
        </div>
        <div>
            <div class="navbar-left">
                    <div class="Avatar">
                        <span>{{ username }}</span>
                    </div>
                <div class="sys">
                    公文传输系统
                </div>

                <div class="navbar-left">
                    <div class="header">
                        <div class="Avatar">{{ username }}</div>
                        <div class="sys-title">公文传输系统</div>
                    </div>
                    <ul class="nav-links">
                        <li><a href="#" @click="handleTabClick('首页')">首页</a></li>
                        <li><a href="#" @click="handleTabClick('公文管理')">公文管理</a></li>
                        <li><a href="#" @click="handleTabClick('公文审核')">公文审核</a></li>
                        <li><a href="#" @click="handleTabClick('用户管理')">用户管理</a></li>
                        <li><a href="#" @click="handleTabClick('日志管理')">日志管理</a></li>
                        <li><a href="#" @click="handleTabClick('公文草拟')">公文草拟</a></li>
                        <!-- ...其他链接,根据需要添加 -->
                    </ul>
                    <div class="footer">
                        <a href="#" class="quit" id="logoutButton">退出系统</a>
                    </div>
                </div>

                <a href="#" class="quit" id="logoutButton">
                    退出系统
                </a>
            </div>
            <div id="sidebarContainer"></div>
        </div>
    </div>
<script>
    const userNameElement = document.querySelector('.user-name');

    userNameElement.addEventListener('click', (event) => {
        event.preventDefault(); // 阻止默认的跳转行为

        // 获取当前页面的 URL
        const currentPageURL = window.location.href;

        // 在这里添加您需要的逻辑,例如弹出用户信息框、切换到用户界面等

        // 示例:在控制台输出当前页面的 URL
        console.log('当前页面的 URL:', currentPageURL);
    });
</script>
    <script src="{% static 'js/main.js' %}"></script>
    <script>
        window.accessLevel = {{ access_level|default_if_none:0 }};
        const logoutButton = document.getElementById('logoutButton');

        logoutButton.addEventListener('click', (event) => {
            event.preventDefault();

            fetch('/logout/', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json',
                    'X-CSRFToken': getCookie('csrftoken') // 替换为获取CSRF令牌的函数,这是一个示例
                },
                // ...其他请求数据
            })
            .then(response => {
                if (response.redirected) {
                    // 延迟3秒后执行重定向
                    setTimeout(() => {
                        window.location.href = response.url; // 重定向到指定页面
                    }, 1000);
                }
            })
            .catch(error => {
                console.error('退出时出错:', error);
            });
        });

        function getCookie(name) {
            const cookieValue = document.cookie.match('(^|;)\\s*' + name + '\\s*=\\s*([^;]+)');
            return cookieValue ? cookieValue.pop() : '';
        }
    </script>
</body>
</html>
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户权限管理</title>
    <link href="../static/images/icon.ico" rel="icon" type="icon">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="{% static 'css/manage.css' %}">
</head>
<body>
    <h1>用户权限管理</h1>
    <p>用户 ID: {{ user.id }}</p>
    <p>用户名: {{ user.username_up }}</p>
    <p>邮箱: {{ user.email }}</p>
    <p>密码: {{ user.password_up }}</p>

    <form method="post" action="{% url 'manage_permission' user.id %}">
        {% csrf_token %}
        <label for="accessLevel">访问权限:</label>
        <select id="accessLevel" name="access_level">
            <option value="0" {% if user.access_level == 0 %} selected {% endif %}>0</option>
            <option value="1" {% if user.access_level == 1 %} selected {% endif %}>1</option>
            <option value="2" {% if user.access_level == 2 %} selected {% endif %}>2</option>
            <option value="3" {% if user.access_level == 3 %} selected {% endif %}>3</option>
        </select>

        <button type="submit">保存权限</button>
        <a href="{% url 'index' %}">取消</a>

        <!-- 提示用户权限含义 -->
        <p>
            0: 普通用户<br>
            1: 管理员<br>
            2: 不能发送公文的普通用户<br>
            3: 黑名单用户,无法进行任何操作
        </p>
    </form>
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            document.querySelector('form').addEventListener('submit', function(event) {
                event.preventDefault(); // 阻止表单默认提交行为

                // 提交表单后,等待 3 秒后跳转到 index 页面
                setTimeout(function() {
                    document.querySelector('form').submit(); // 提交表单
                }, 3000); // 等待 3 秒
            });
        });
    </script>
</body>
</html>

后端部分代码

部分模块

def login(request):
    if request.method == 'POST':
        id_in = request.POST['id_in']
        password_in = request.POST['password_in']

        # 查询数据库,检查用户是否存在
        try:
            user_profile = UserProfile.objects.get(id=id_in, password_up=password_in)
        except UserProfile.DoesNotExist:
            messages.error(request, '学号或密码错误,请重新输入。')
            return redirect('login')

        # 登录成功,将用户信息存储到session中
        request.session['user_id'] = user_profile.id
        request.session['username'] = user_profile.username_up

        LogData = Log.objects.create(
            username = user_profile.username_up,
            documentname = "无",
            operation = f'用户{user_profile.username_up}于{timezone.now()}登录了系统。'
        )
        LogData.save()

        # 可以在这里添加其他处理,例如重定向到成功页面或显示成功消息
        # 登录成功,添加消息
        time.sleep(3)
        return redirect('index')

    return render(request, 'login.html')  # 替换为你的模板路径
def register(request):
    if request.method == 'POST':
        id = request.POST['id']
        username_up = request.POST['username_up']
        email = request.POST['email']
        password_up = request.POST['password_up']

        priKey = PrivateKey()
        pubKey = priKey.publicKey()

        new_user = UserProfile.objects.create(
            id=id,
            username_up=username_up,
            email=email,
            password_up=password_up,
            public_key=pubKey.toString(compressed=False),  # 存储公钥
            private_key=priKey.toString(), # 存储私钥
            avatar='avatars/default_avatar.png'
        )
        new_user.save()

        LogData = Log.objects.create(
            username = new_user.username_up,
            documentname = "无",
            operation = f'用户{new_user.username_up}于{timezone.now()}注册了账号。'
        )
        LogData.save()

        # 添加成功消息
        messages.success(request, '注册成功,请登录。')
        time.sleep(3)
        return redirect('login')

    return render(request, 'register.html')  # 替换为你的模板路径
def index(request):
    # 检查用户是否登录
    if 'user_id' in request.session:
        user_id = request.session['user_id']
        username = request.session['username']
        try:
            # 根据用户名查询用户的访问权限
            user_profile = UserProfile.objects.get(username_up=username)
            access_level = user_profile.access_level

            # 不再处理用户头像,直接渲染模板
            return render(request, 'index.html', {
                'user_id': user_id,
                'username': username,
                'access_level': access_level,
                # 可以选择提供默认头像的 URL 或完全去除头像 URL
                'user_avatar_url': '/path/to/default/avatar.png'  # 示例路径,根据需要修改
            })
        except UserProfile.DoesNotExist:
            # 处理未找到用户的情况
            pass

    else:
        # 用户未登录,可以重定向到登录页面或其他处理
        return redirect('login')
def create_user(request):
    current_user = request.session['username']
    if request.method == 'POST':
        form = UserForm(request.POST)
        if form.is_valid():
            # 获取表单数据并保存到数据库
            id = form.cleaned_data['id']
            username = form.cleaned_data['username_up']
            email = form.cleaned_data['email']
            password = form.cleaned_data['password_up']

            priKey = PrivateKey()
            pubKey = priKey.publicKey()
            # 保存到数据库中
            UserProfile.objects.create(
                id=id,
                username_up=username,
                email=email,
                password_up=password,
                public_key=pubKey.toString(compressed=False),  # 存储公钥
                private_key=priKey.toString(),  # 存储私钥
                avatar='avatars/default_avatar.png'
            )

            LogData = Log.objects.create(
                username=current_user,
                documentname="无",
                operation=f'用户{current_user}于{timezone.now()}创建了新用户{username}。'
            )
            LogData.save()

            # 重定向到 index 页面,使用 HttpResponseRedirect 对象
            return HttpResponseRedirect(reverse('index'))

    else:
        form = UserForm()

    return render(request, 'adduser.html', {'form': form})

以上代码均已托管至公文传输系统实现代码/冲刺

冲刺第三天

第三天 负责人 工作量
调试数据库 陈夏林 2
完善接口 陈夏林 2
数据库初始化设置 陈夏林 1
完善文件上传下载模块 谷丰宇、罗杰逊 3
基于角色的权限控制设计 谷丰宇、罗杰逊 1
适配增加的功能 谷丰宇、罗杰逊 1
管理员功能开发 陈夏林 2
完善用户功能接口 董准、熊悠越 2
根据后端接口完善前端界面 董准、熊悠越 2
继续完善用户数据的相关内容 董准、熊悠越 2
明日任务安排 熊悠越 1

明日任务安排

第三天 工作量
继续调试数据库 2
完善接口 3
完成数据库初始化设置 2
主干功能完善 2
功能测试 4
完善文件上传下载模块 2
适配增加的功能 2
风格化样式 2
增加验证码 2
根据后端接口完善前端界面 3
继续完善用户数据的相关内容 2
明日任务安排 1

团队风采

posted @ 2023-12-10 12:26  20211428谷丰宇  阅读(12)  评论(0编辑  收藏  举报