diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/1\347\217\255/1\347\217\255_\345\230\230\345\230\230/1\347\217\255_\345\230\230\345\230\230_\347\254\254\345\215\201\344\272\224\345\221\250_\344\275\234\344\270\232/1\347\217\255_\345\230\230\345\230\230_\347\254\254\344\270\200\350\212\202\350\257\276_\344\275\234\344\270\232/re_test.py" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/1\347\217\255/1\347\217\255_\345\230\230\345\230\230/1\347\217\255_\345\230\230\345\230\230_\347\254\254\345\215\201\344\272\224\345\221\250_\344\275\234\344\270\232/1\347\217\255_\345\230\230\345\230\230_\347\254\254\344\270\200\350\212\202\350\257\276_\344\275\234\344\270\232/re_test.py" new file mode 100644 index 0000000000000000000000000000000000000000..5b617b4d359b828eaaae974ee2bad3370e9b7c7b --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/1\347\217\255/1\347\217\255_\345\230\230\345\230\230/1\347\217\255_\345\230\230\345\230\230_\347\254\254\345\215\201\344\272\224\345\221\250_\344\275\234\344\270\232/1\347\217\255_\345\230\230\345\230\230_\347\254\254\344\270\200\350\212\202\350\257\276_\344\275\234\344\270\232/re_test.py" @@ -0,0 +1,5 @@ +import re + +path = "5/vote/" +m = re.match(r'^(?P\d+)/vote/', path) +print(m.group("question_id")) \ No newline at end of file diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/1\347\217\255/1\347\217\255_\345\230\230\345\230\230/1\347\217\255_\345\230\230\345\230\230_\347\254\254\345\215\201\344\272\224\345\221\250_\344\275\234\344\270\232/1\347\217\255_\345\230\230\345\230\230_\347\254\254\344\270\200\350\212\202\350\257\276_\344\275\234\344\270\232/urls.py" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/1\347\217\255/1\347\217\255_\345\230\230\345\230\230/1\347\217\255_\345\230\230\345\230\230_\347\254\254\345\215\201\344\272\224\345\221\250_\344\275\234\344\270\232/1\347\217\255_\345\230\230\345\230\230_\347\254\254\344\270\200\350\212\202\350\257\276_\344\275\234\344\270\232/urls.py" new file mode 100644 index 0000000000000000000000000000000000000000..d46e298c087fa20d21e399eed5a4121872cabf4d --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/1\347\217\255/1\347\217\255_\345\230\230\345\230\230/1\347\217\255_\345\230\230\345\230\230_\347\254\254\345\215\201\344\272\224\345\221\250_\344\275\234\344\270\232/1\347\217\255_\345\230\230\345\230\230_\347\254\254\344\270\200\350\212\202\350\257\276_\344\275\234\344\270\232/urls.py" @@ -0,0 +1,12 @@ +from django.urls import path, re_path +from . import views + +app_name = 'polls' +urlpatterns = [ + path('', views.IndexView.as_view(), name='index'), + path('/', views.detail, name='detail'), + path('/results', views.results, name='results'), + path('/vote/', views.vote, name='vote'), + # re_path(r'^(?P\d+)/vote/$', views.vote, name='vote') + path('file/', views.file_test) +] \ No newline at end of file diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/1\347\217\255/1\347\217\255_\345\230\230\345\230\230/1\347\217\255_\345\230\230\345\230\230_\347\254\254\345\215\201\344\272\224\345\221\250_\344\275\234\344\270\232/1\347\217\255_\345\230\230\345\230\230_\347\254\254\344\270\200\350\212\202\350\257\276_\344\275\234\344\270\232/views.py" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/1\347\217\255/1\347\217\255_\345\230\230\345\230\230/1\347\217\255_\345\230\230\345\230\230_\347\254\254\345\215\201\344\272\224\345\221\250_\344\275\234\344\270\232/1\347\217\255_\345\230\230\345\230\230_\347\254\254\344\270\200\350\212\202\350\257\276_\344\275\234\344\270\232/views.py" new file mode 100644 index 0000000000000000000000000000000000000000..91b542d983bbc82214f5dc5a48d5e5cebba2cc74 --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/1\347\217\255/1\347\217\255_\345\230\230\345\230\230/1\347\217\255_\345\230\230\345\230\230_\347\254\254\345\215\201\344\272\224\345\221\250_\344\275\234\344\270\232/1\347\217\255_\345\230\230\345\230\230_\347\254\254\344\270\200\350\212\202\350\257\276_\344\275\234\344\270\232/views.py" @@ -0,0 +1,80 @@ +from django.shortcuts import render, get_object_or_404 +from django.db import transaction +from django.http import HttpResponse, Http404, HttpResponseRedirect, JsonResponse, FileResponse +from django.urls import reverse +from django.views import generic +from .models import Question, Choice +# Create your views here. + +# class IndexView(generic.View): +# def get(self, *args, **kwargs): +# pass +# +# def post(self, *args, **kwargs): +# pass +# +# def put(self, *args, **kwargs): +# pass +# +# def delete(self, *args, **kwargs): +# pass + + +class IndexView(generic.TemplateView): + template_name = "polls/index.html" + + def get_context_data(self, **kwargs): + latest_question_list = Question.objects.order_by('-pub_date')[:5] + context = { + 'latest_question_list': latest_question_list, + } + return context + +def index(request): + latest_question_list = Question.objects.order_by('-pub_date')[:5] + context = { + 'latest_question_list': latest_question_list, + } + return render(request, 'polls/index.html', context) + +def detail(request, question_id): + try: + question = Question.objects.get(pk=question_id) + context = { + "question":question + } + except Question.DoesNotExist: + raise Http404("Question does not exist") + return render(request, "polls/detail.html", context) + +def results(request, question_id): + question = get_object_or_404(Question, pk=question_id) + return render(request, 'polls/results.html', {'question': question}) + +# @transaction.atomic() +def vote(request, question_id): + question = get_object_or_404(Question, pk=question_id) + try: + selected_choice = question.choice_set.get(pk=request.POST['choice']) + except (KeyError, Choice.DoesNotExist): + # Redisplay the question voting form. + return render(request, 'polls/detail.html', { + 'question': question, + 'error_message': "You didn't select a choice.", + }) + else: + selected_choice.votes += 1 + selected_choice.save() + # Always return an HttpResponseRedirect after successfully dealing + # with POST data. This prevents data from being posted twice if a + # user hits the Back button. + return HttpResponseRedirect(reverse('polls:results', args=(question.id,))) + + +def file_test(request): + filename = "views.py" + with open("polls/views.py", "r", encoding="utf-8")as f: + response = FileResponse(f.read()) + response['content-type'] = "application/octet-stream" + response['content-disposition'] = f"attachment; filename={filename}" + return response \ No newline at end of file diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/1\347\217\255/1\347\217\255_\345\230\230\345\230\230/1\347\217\255_\345\230\230\345\230\230_\347\254\254\345\215\201\344\272\224\345\221\250_\344\275\234\344\270\232/1\347\217\255_\345\230\230\345\230\230_\347\254\254\344\270\200\350\212\202\350\257\276_\344\275\234\344\270\232/\347\273\203\344\271\240\350\277\224\345\233\236\347\261\273\345\236\213.txt" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/1\347\217\255/1\347\217\255_\345\230\230\345\230\230/1\347\217\255_\345\230\230\345\230\230_\347\254\254\345\215\201\344\272\224\345\221\250_\344\275\234\344\270\232/1\347\217\255_\345\230\230\345\230\230_\347\254\254\344\270\200\350\212\202\350\257\276_\344\275\234\344\270\232/\347\273\203\344\271\240\350\277\224\345\233\236\347\261\273\345\236\213.txt" new file mode 100644 index 0000000000000000000000000000000000000000..e4a4e11c132f3e3d57dad3e2c4b258e744703b64 --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/1\347\217\255/1\347\217\255_\345\230\230\345\230\230/1\347\217\255_\345\230\230\345\230\230_\347\254\254\345\215\201\344\272\224\345\221\250_\344\275\234\344\270\232/1\347\217\255_\345\230\230\345\230\230_\347\254\254\344\270\200\350\212\202\350\257\276_\344\275\234\344\270\232/\347\273\203\344\271\240\350\277\224\345\233\236\347\261\273\345\236\213.txt" @@ -0,0 +1,20 @@ +1. 返回字符串 +return HttpResponse('test') + +2.返回JSON格式和字符串 +from django.http import JsonResponse +return JsonResponse({'choice': 2}, safe=Flase) + + +3. 返回文件 +from django.http import FileResponse +def file_test(request): + filename = "views.py" + with open("polls/views.py", "r", encoding="utf-8")as f: + response = FileResponse(f.read()) + response['content-type'] = "application/octet-stream" + response['content-disposition'] = f"attachment; filename={filename}" + return response + +4. 返回异常 +raise Http404() \ No newline at end of file