基于信号处理的在线云评测+社区系统( 6)

   20175-6月,本小组做山东大学软件工程专业项目实训。我们做的项目是基于信号处理的在线云评测+社区系统,我和另一位组员@zhan010g负责数据库后台方面。

本周我们比较完善地实现了用户注册-登录-查看问题-编辑代码-提交代码-新建帖子等功能,我们写的代码如下。

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.shortcuts import get_object_or_404, render, render_to_response

# Create your views here.
from django.http import HttpResponseRedirect, HttpResponse
from django.urls import reverse
from django.utils import timezone
from django.template import loader, RequestContext
from django.views import generic
from django import forms

from .models import Problem, User, SubmitCode, AcceptedCode, Discussion, Response

class DiscussionForm(forms.Form):
    title = forms.CharField()
    text = forms.CharField(widget=forms.Textarea)
    code = forms.CharField(widget=forms.Textarea)


class ResponseForm(forms.Form):
    text = forms.CharField(widget=forms.Textarea)
    code = forms.CharField(widget=forms.Textarea)

 problem list page
class ProblemsView(generic.ListView):
    model = Problem
    template_name = 'judgeOL/problems.html'
    context_object_name = 'problem_list'

    @staticmethod
    def get_problems(page_num):
        if page_num > 20 or page_num < 0:
            page_num = 0
        a = page_num*50
        b = a+50
        return Problem.objects.all()[a:b]


# coding page , submit code , get result
class CodingView(generic.TemplateView):
    template_name = 'judgeOL/coding.html'

    def get_context_data(self, **kwargs):
        context = super(CodingView, self).get_context_data(**kwargs)
        context['problem_id'] = self.kwargs['problem_id']
        return context


# bbs page, so many discussions
class DiscussionView(generic.ListView):
    model = Discussion
    template_name = 'judgeOL/discussions.html'
    context_object_name = 'discussion_list'

    @staticmethod
    def get_discussions(problem_id):
        return Discussion.objects.get(problem_id=problem_id)

    def get_context_data(self, **kwargs):
        context = super(DiscussionView, self).get_context_data(**kwargs)
        context['problem_id'] = self.kwargs['problem_id']
        context['problem_name'] = Problem.objects.get(pk=self.kwargs['problem_id']).name
        return context


# every discussions have a lot of responses
class ResponseView(generic.ListView):
    model = Response
    template_name = 'judgeOL/responses.html'
    context_object_name = 'response_list'

    def get_queryset(self):
        return Response.objects.all().filter(discussion_id=self.kwargs['discussion_id'])

    def get_context_data(self, **kwargs):
        context = super(ResponseView, self).get_context_data(**kwargs)
        context['discussion'] = Discussion.objects.get(pk=self.kwargs['discussion_id'])
        context['problem_id'] = self.kwargs['problem_id']
        return context


class EditView(generic.TemplateView):
    template_name = 'judgeOL/edit.html'

    def get_context_data(self, **kwargs):
        context = super(EditView, self).get_context_data(**kwargs)
        context['problem_id'] = self.kwargs['problem_id']
        return context

def new_discussion(request, problem_id):
    if request.method == 'GET':
        return HttpResponseRedirect(reverse('judgeOL:discussions', args={problem_id}))
    else:
        try:
            name = request.POST['title']
            pub_text = request.POST['text']
            pub_code = request.POST['code']
            user_id = request.session['user_id']
            Discussion.objects.create(user_id=user_id, problem_id=problem_id, name=name, pub_text=pub_text,
                                      pub_code=pub_code, pub_date=timezone.now(), vote_count=1, view_count=1)
            return HttpResponseRedirect(reverse('judgeOL:discussions', args={problem_id}))
        except KeyError:
            return HttpResponse('key error')

        """
        discussion_form = DiscussionForm(request.POST)
        if discussion_form.is_valid():
            name = discussion_form.cleaned_data['title']
            pub_text = discussion_form.cleaned_data['pub_text']
            pub_code = discussion_form.cleaned_data['pub_code']
            user_id = request.session['user_id']
            Discussion.objects.create(user_id=user_id, problem_id=problem_id, name=name, pub_text=pub_text,
                                      pub_code=pub_code, pub_date=timezone.now(), vote_count=1, view_count=1)
            return HttpResponse(reverse('judgeOL:discussions', args={problem_id}))
        else:
            return HttpResponse('judgeOL/error.html')
        """


def new_response(request, problem_id, discussion_id):
    if request.method == 'GET':
        response_form = ResponseForm()
        return HttpResponseRedirect(reverse('judgeOL:responses',
                                                kwargs={'problem_id': problem_id, 'discussion_id': discussion_id}))
    else:
        response_form = ResponseForm(request.POST)
        if response_form.is_valid():
            pub_text = response_form.cleaned_data['text']
            pub_code = response_form.cleaned_data['code']
            user_id = request.session['user_id']
            Response.objects.create(discussion_id=discussion_id, user_id=user_id, pub_text=pub_text,
                                    pub_code=pub_code, pub_date=timezone.now(), vote_count=1)
            return HttpResponseRedirect(reverse('judgeOL:responses',
                                                kwargs={'problem_id': problem_id, 'discussion_id': discussion_id}))


猜你喜欢

转载自blog.csdn.net/jjj1299894209/article/details/72814827