Django框架通用视图类的使用

好记性不如烂笔头之Django框架通用视图类的使用

一下是学习Django框架的一些知识点,一来方便自己查看,二来可以为人提供参考。

数据库模型CommonViewClass.py文件内容:

#!/usr/bin/env python
# -*-encoding:UTF-8-*-

# 通用视图类

# 简单的通用视图类
from django.http import HttpResponse
from django.views.generic import View

class MyView(View):
    def get(self,request,*args,**kwargs):
        return HttpResponse('Hello World!')

# 可以向模板中传递变量值的通用类
from django.views.generic.base import TemplateView

class HomePageView(TemplateView):
    template_name = "product1.html"
    def get_context_data(self, **kwargs):
        context = super(HomePageView,self).get_context_data(**kwargs)
        context['phone_product1'] = 'iPhone'
        context['phone_product2'] = 'Android Mobile'
        return context

# 用来跳转的通用视图类

# 列表视图(listView) 需要listview,需要Movie
from django.views.generic import ListView,DeleteView
from testdb.models import Movie

# 妈的!!要区分context_object_name 和 comtext_object_name啊啊!! 后面没有智能提示的!!!
class MovieView(ListView):
    model = Movie
    template_name = 'movie_view.html'
    context_object_name = 'movies'

class QueryMovieView(ListView):
    model = Movie
    template_name = 'movie_view.html'
    context_object_name = 'movies'
    def get_queryset(self):
        return super(QueryMovieView,self).get_queryset().filter(type='喜剧')

# 通过地址设置参数:http://127.0.0.1:8000/param_query_movie_view/?name=流浪地球
class ParamQueryMovieView(ListView):
    model = Movie
    template_name = 'movie_view.html'
    context_object_name = 'movies'
    def get_queryset(self):
        name = self.request.GET.get('name')
        return super(ParamQueryMovieView,self).get_queryset().filter(name=name)

# 细节视图(DetailVIew)
# 浏览器的访问路径为这样:http://127.0.0.1:8000/movie_detail/13/
class MovieDetailView(DeleteView):
    queryset = Movie.objects.all()
    template_name = 'movie_detail.html'
    context_object_name = 'movie'
    def get_object(self, queryset=None):
        obj = super(MovieDetailView,self).get_object(queryset=queryset)
        return obj

2、路径映射文件urls.py 文件的只要内容为:

#!/usr/bin/env python
# -*-encoding:UTF-8-*-

from django.conf.urls import url
from django.contrib import admin
from .views import CommentViewClass

from django.views.generic.base import RedirectView

# 动态URL的使用
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^myview/$', CommentViewClass.MyView.as_view()),   # 使用里面内置的方法返回相应的程序,注意是as_view()
    url(r'^homepage/$',CommentViewClass.HomePageView.as_view()),
    url(r'^geekori/$', RedirectView.as_view(url='https://geekori.com')),
    url(r'^baidu/$', RedirectView.as_view(url='https://baidu.com')),
    url(r'^movie_view/$',CommentViewClass.MovieView.as_view()),
    url(r'^query_movie_view/$',CommentViewClass.QueryMovieView.as_view()),
    url(r'^param_query_movie_view/$', CommentViewClass.ParamQueryMovieView.as_view()),
    # <pk>表示主键 \d+ 表示至少有一个数字
    url(r'^movie_detail/(?P<pk>\d+)/$', CommentViewClass.MovieDetailView.as_view()),
]

3、更多HTML文件的实现代码可以参考项目源代码,如果有用、喜欢,请动动手指star一下啦!:

https://github.com/too-hoo/SecondDjango

猜你喜欢

转载自blog.csdn.net/ATOOHOO/article/details/88364419