2017年5月-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}))