慕课网-Django入门到进阶-更适合Python小白的系统课程-第4章Django中的ORM和数据库-4-10本章练习:消息的插入与查询

第4章 Django 中的 ORM 和数据库

4-10 本章练习:消息的插入与查询

1.在项目 message_test 下目录 app,修改文件 views.py

import time

from django.views.generic import View
from django.shortcuts import render, redirect, reverse
#from django.http import HttpResponse

from .models import Message
from .consts import MessageType

class LessionThree(View):
    TEMPLATE = 'three.html'
    def get(self, request, message_type):
        data = {}
        try:
            message_type_obj = MessageType[message_type]
        except Exception as e:
            data['error'] = '没有这个消息类型 {}'.format(e)
            return render(request, self.TEMPLATE, data)
        message = request.GET.get('message', '')

        if not message:
            data['error'] = '消息不可为空'
            return render(request, self.TEMPLATE, data)

        data['message'] = message
        data['message_type'] = message_type_obj

        return render(request, self.TEMPLATE, data)

class LessionFourPageOne(View):
    TEMPLATE = 'four_page_one.html'
    def get(self, request, message_type):
        data = {}
        try:
            message_type_obj = MessageType[message_type]
        except Exception as e:
            data['error'] = '没有这个消息类型 {}'.format(e)
            return render(request, self.TEMPLATE, data)

        message = request.GET.get('message', '')
        if not message:
            data['error'] = '消息不可为空'
            return render(request, self.TEMPLATE, data)

        Message.objects.create(
            content=message,
            message_type=message_type_obj.value,
            created_time=time.time()
        )

        return redirect(reverse('fourpagetwo'))

class LessionFourPageTwo(View):
    TEMPLATE = 'four_page_two.html'
    def get(self, request):
        return render(request, self.TEMPLATE)

2.在项目 message_test 下目录 message_test,修改文件 urls.py

from django.urls import path
from .views import LessionThree, LessionFourPageOne, LessionFourPageTwo

urlpatterns = [
  path('three/<str:message_type>', LessionThree.as_view(), name='three'),
  path('fourPageOne/<str:message_type>', LessionFourPageOne.as_view()),
  path('fourPageTwo', LessionFourPageTwo.as_view(), name='fourpagetwo'),
]

3.在项目 message_test 下目录 templates,添加文件 four_page_one.html 和 our_page_two.html  

4.在项目 message_test 下目录 templates,修改文件 four_page_one.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {{error}}
</body>
</html>

5.命令行窗口进入目录 message_test,运行命令启动服务,在数据表 app_message 中添加数据,添加数据后直接跳转到文件 fourPageTwo.html

python manage.py runserver 127.0.0.1:8000

6.在命令行窗口进入 mysql 界面查看

7.在项目 message_test 下目录 app,修改文件 views.py,修改类 LessionFourPageTwo

import time

from django.views.generic import View
from django.shortcuts import render, redirect, reverse
#from django.http import HttpResponse

from .models import Message
from .consts import MessageType

class LessionThree(View):
    TEMPLATE = 'three.html'
    def get(self, request, message_type):
        data = {}
        try:
            message_type_obj = MessageType[message_type]
        except Exception as e:
            data['error'] = '没有这个消息类型 {}'.format(e)
            return render(request, self.TEMPLATE, data)
        message = request.GET.get('message', '')

        if not message:
            data['error'] = '消息不可为空'
            return render(request, self.TEMPLATE, data)

        data['message'] = message
        data['message_type'] = message_type_obj

        return render(request, self.TEMPLATE, data)

class LessionFourPageOne(View):
    TEMPLATE = 'four_page_one.html'
    def get(self, request, message_type):
        data = {}
        try:
            message_type_obj = MessageType[message_type]
        except Exception as e:
            data['error'] = '没有这个消息类型 {}'.format(e)
            return render(request, self.TEMPLATE, data)

        message = request.GET.get('message', '')
        if not message:
            data['error'] = '消息不可为空'
            return render(request, self.TEMPLATE, data)

        Message.objects.create(
            content=message,
            message_type=message_type_obj.value,
            created_time=time.time()
        )

        return redirect(reverse('fourpagetwo'))

class LessionFourPageTwo(View):
    TEMPLATE = 'four_page_two.html'
    def get(self, request):
        data ={}
        messages = Message.objects.all()
        data['messages'] = messages
        return render(request, self.TEMPLATE, data)

8.在项目 message_test 下目录 templates,修改文件 four_page_two.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <ul>
        {% for message in messages %}
            <li>{{message.content}}</li>
        {% endfor%}
    </ul>
</body>
</html>

9.测试

10.在项目 message_test 下目录 app,修改文件 models.py 

# coding:utf-8

from django.db import models
from .consts import MessageType

class Message(models.Model):
    content = models.TextField()
    message_type = models.CharField(max_length=10, db_index=True)
    created_time = models.IntegerField(default=0)

    def __str__(self):
        return 'type:{}, content:{}'.format(self.message_type, self.content)

    @property
    def message_typ(self):
        try:
            return MessageType[self.message_type]
        except:
            return MessageType.info

11.在项目 message_test 下目录 templates,修改文件 four_page_two.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <ul>
        {% for message in messages %}
            <li style="color:{{message.message_typ.color}}">{{message.content}}</li>
        {% endfor%}
    </ul>
</body>
</html>

12.测试

13.在项目 message_test 下目录 app,修改文件 models.py

from .models import Message
from .consts import MessageType

class LessionThree(View):
    TEMPLATE = 'three.html'
    def get(self, request, message_type):
        data = {}
        try:
            message_type_obj = MessageType[message_type]
        except Exception as e:
            data['error'] = '没有这个消息类型 {}'.format(e)
            return render(request, self.TEMPLATE, data)
        message = request.GET.get('message', '')

        if not message:
            data['error'] = '消息不可为空'
            return render(request, self.TEMPLATE, data)

        data['message'] = message
        data['message_type'] = message_type_obj

        return render(request, self.TEMPLATE, data)

class LessionFourPageOne(View):
    TEMPLATE = 'four_page_one.html'
    def get(self, request, message_type):
        data = {}
        try:
            message_type_obj = MessageType[message_type]
        except Exception as e:
            data['error'] = '没有这个消息类型 {}'.format(e)
            return render(request, self.TEMPLATE, data)

        message = request.GET.get('message', '')
        if not message:
            data['error'] = '消息不可为空'
            return render(request, self.TEMPLATE, data)

        Message.objects.create(
            content=message,
            message_type=message_type_obj.value,
            created_time=time.time()
        )

        return redirect(reverse('fourpagetwo'))

class LessionFourPageTwo(View):
    TEMPLATE = 'four_page_two.html'
    def get(self, request):
        data ={}
        search = request.GET.get('search', '')
        if search:
            messages = Message.objects.filter(content__contains=search)
        else:
            messages = Message.objects.all()
        data['messages'] = messages
        return render(request, self.TEMPLATE, data)

14.在项目 message_test 下目录 templates,修改文件 four_page_two.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <ul>
        {% for message in messages %}
            <li style="color:{{message.message_typ.color}}">
                {{message.content}}
                {{message.created_time}}
            </li>
        {% endfor%}
    </ul>
</body>
</html>

15.测试

 

posted on 2020-02-03 09:31  herisson_pan  阅读(7)  评论(0)    收藏  举报

导航