从一组问题中随机选择

2024-03-28 15:09:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试重新创建黑客游戏,因为没有API来创建我自己的问题,并在外部站点上实现,但是我使用django和restful框架来完成这项任务。(我不确定这是否是实现这一目标的权利)。我会通过服务器来做这件事,因为我不想让人们改变js,绕过这些东西,甚至禁用js,停止时间,然后继续问同样的问题,但我怎么能把它翻译成django呢

from django.shortcuts import get_object_or_404

from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status

from .models import Question, Choice
from .serializers import QuestionListPageSerializer, QuestionDetailPageSerializer, ChoiceSerializer, VoteSerializer, QuestionResultPageSerializer


@api_view(['GET', 'POST'])
def questions_view(request):
    if request.method == 'GET':
        questions = Question.objects.all()
        serializer = QuestionListPageSerializer(questions, many=True)
        return Response(serializer.data)
    elif request.method == 'POST':
        serializer = QuestionListPageSerializer(data=request.data)
        if serializer.is_valid():
            question = serializer.save()
            return Response(QuestionListPageSerializer(question).data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class QuestionListPageSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    question_text = serializers.CharField(max_length=200)
    pub_date = serializers.DateTimeField()
    was_published_recently = serializers.BooleanField(read_only=True) # Serializer is smart enough to understand that was_published_recently is a method on Question
    code = serializers.CharField(max_length=200)

    def create(self, validated_data):
        return Question.objects.create(**validated_data)

    def update(self, instance, validated_data):
        for key, value in validated_data.items():
            setattr(instance, key, value)
        instance.save()
        return instance

python测试用例

import random
import pprint
def pick_ten(fname):
    question_list = []
    for question in open(fname):
        # strip off new line character
        question = question.rstrip()
        question_list.append(question)
    return random.sample(question_list, 1)
# testing ...
filename = "Questions101.txt"
question_list = pick_ten(filename)
pprint.pprint(question_list)

响应测试用例

xxxxxx@xxxxxx:~$ python3 quiz.py 
['What was the first brand name for Bubble Gum?']
xxxxxx@xxxxxx:~$ python3 quiz.py 
['Which game uses the phrase "en passant"?']
xxxxxx@xxxxxx:~$ python3 quiz.py 
['What type of organism causes malaria?']
xxxxxx@xxxxxx:~$ 

Tags: fromimportdatareturnresponserequestdefstatus
1条回答
网友
1楼 · 发布于 2024-03-28 15:09:27

您可以使用^{}这样做:

# random_questions.py

from quizapp.models import Question

def pick_random():
    return Question.objects.all().order_by('?').first()

if __name__ == '__main__':
    question = pick_random()
    print(question.question_text)

# run

python manage.py shell < /path/to/random_questions.py

相关问题 更多 >