Django实战(6)——学生作业批改系统demo2(用Textfield实现作业发布)/软件工程方法学大作业

上一篇文章(https://blog.csdn.net/qq_41938259/article/details/100603248)实现了学生上传作业,教师作业打分,学生查看分数。还缺少一个作业发布的功能,在同学的提醒下我才发现了这个要求忘记做了,所以才现在抽空搞完。

这里是我上传到Github上的,这个项目的全部代码的地址:https://github.com/timTianWSRF/student_house

这是暂时的成效图:


好了,现在切入正题。

首先我要创建一个叫做homework的app专门用来管理发布作业功能。还是这个熟悉的命令行:

python manage.py startapp homework

于是就多了这么一个目录 :

看了一下,这个目录需要编辑的是admin.py,apps.py,models.p这几个文件,运行完命令行后先得让app上线,于是修改app.py这个文件:

from django.apps import AppConfig


class HomeworkConfig(AppConfig):
    name = 'homework'

第二步得去models.py去定义具体的字段值之类的,让Django知道你要干些什么:

from django.db import models


class Homework(models.Model):
    hw = models.TextField(default="尚未有公布的作业", verbose_name='作业公告栏')

    def __str__(self):
        return '<Homework: {}>'.format(self.hw)

    class Meta:
        verbose_name = verbose_name_plural = "HomeworkInf"

    @classmethod
    def get_all(cls):
        return cls.objects.all()

第三步是修改admin.py使得后台可以显示:

from django.contrib import admin
from .models import Homework


class HomeworkAdmin(admin.ModelAdmin):
    list_display = ('hw',)


admin.site.register(Homework, HomeworkAdmin)

这样子,进入管理页面后就可以看见,有个文本框可以输入字符,用来写发布的作业的内容。

 

 

下一步便是让作业可以显示在页面上了。我们需要修改html文件,还有student/views.py。

在student/views.py中加入以下这几句话:

from homework.models import Homework

def index(request):
    homeworks = Homework.get_all()

    context = {
        'homeworks': homeworks,
    }
    return render(request, 'index.html', context=context)

 

于是这个文件就变成了现在这个样子了:

from django.shortcuts import render
from .models import Student
import os
from django.http import HttpResponse
from django.http import HttpResponseRedirect
from .forms import StudentForm
from .models import Student
from homework.models import Homework
from django.urls import reverse


def index(request):
    homeworks = Homework.get_all()
    students = Student.get_all()
    if request.method == 'POST':
        form = StudentForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('index'))
    else:
        form = StudentForm()

    context = {
        'homeworks': homeworks,
        'students': students,
        'form': form,
    }
    return render(request, 'index.html', context=context)


def test(request):
    return render(request, 'test.html', {'document_root': '/student/static'})


def test2(request):
    return render(request, 'test2.html')


def upload_file(request):
    homeworks = Homework.get_all()
    students = Student.get_all()

    if request.method == "POST":    # 请求方法为POST时,进行处理
        myFile = request.FILES.get("myfile", None)    # 获取上传的文件,如果没有文件,则默认为None
        if not myFile:
            return HttpResponse("no files for upload!")
        destination = open(os.path.join("E:\\", myFile.name), 'wb+')    # 打开特定的文件进行二进制的写操作
        for chunk in myFile.chunks():      # 分块写入文件
            destination.write(chunk)
        destination.close()

        form = StudentForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('index'))
        else:
            form = StudentForm()

        context = {
            'homeworks': homeworks,
            'students': students,
            'form': form,
        }
        return render(request, 'index.html', context=context)
# Create your views here.

接着是在index.html中加入这些:

        <li>作业公布栏</li>
        <ul>
            {% for home in homeworks %}
                <li>{{ home.hw }}</li>
            {% endfor %}
        </ul><hr/>

这个文件现在是这个样子了:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <link rel="stylesheet" type="text/css" href="/staticfiles/css/style.css">
        <title>学员管理系统</title>
    </head>
    <body>
        <h3><a href="/admin/">前往教师后台管理页面</a></h3><hr/>
        <li>作业公布栏</li>
        <ul>
            {% for home in homeworks %}
                <li>{{ home.hw }}</li>
            {% endfor %}
        </ul><hr/>
        <b class="abc abd">学生分数查询表</b>
        <ul>
            {% for student in students %}
                <li>{{ student.name }} - {{ student.score }}</li>
            {% endfor %}
        </ul>
        <hr/>
        <b class="abc abd mid">作业提交处</b>
        <form enctype="multipart/form-data" action="/uploadFile/" method="POST">
            {% csrf_token %}
            {{ form }}
            <input type="file" name="myfile" />
            <input type="submit" value="上传"/>
            <li>Tips:文件保存在E盘</li>
        </form>
    </body>
</html>

就是这么多了!

END

Django是一个流行的高级Python Web框架,它提供了很多内置的功能,包括一个强大的ORM(对象关系映射)系统和用于快速搭建应用的能力。如果要在Django中创建一个通知(Notification)应用程序,通常会涉及以下几个步骤: 1. **模型设计**:首先,你需要定义一个`Notification`模型,包含基本的信息如标题、内容、发送者和接收者等。可能还会有一个状态字段(如已读/未读)。 ```python from django.db import models class Notification(models.Model): title = models.CharField(max_length=200) content = models.TextField() sender = models.ForeignKey(User, on_delete=models.CASCADE, related_name='sent_notifications') recipient = models.ForeignKey(User, on_delete=models.CASCADE, related_name='received_notifications') is_read = models.BooleanField(default=False) ``` 2. **视图处理**:对于用户接收和管理通知,你可以创建视图函数来显示通知列表、标记为已读、删除通知等。例如,展示通知可能涉及到从数据库获取用户的通知并分页展示。 3. **模板渲染**:创建HTML模板,比如`notifications.html`,用于显示通知详情或通知列表。 4. **信号和任务**:如果需要异步处理(比如通过邮件、推送通知等),可以使用Django的信号系统结合Celery或其他任务队列工具。 5. **URL配置**:在urls.py文件中设置路由,将用户访问通知的URL映射到相应的视图函数。 6. **权限管理**:为了保护用户的隐私,可能需要对哪些用户可以看到特定通知进行权限控制。 完成以上步骤后,用户就可以在Django网站上看到和管理他们的通知了。如果你有更具体的问题,比如如何实现某种功能或者遇到技术难题,欢迎提问:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

TIM33470348

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

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

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

打赏作者

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

抵扣说明:

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

余额充值