• Django字段排序 类视图


    字段排序
    {% for band in bands %}
    <a href="/show_player/?id={{ band.id }}">{{ band.name }}:{{ band.player_set.all|length }}</a>
    {% endfor %}

    类视图

    from django.views import View

    # 类视图获取列表及详情
    class Categoodlist(View):
    def get(self,request):
    cate=Cate.objects.all()
    data={'cate':cate}
    return render(request,'web/index.html',data)
    def post(self,request):
    return HttpResponse('post')
    def put(self,request):
    return HttpResponse('put')
    def delete(self,request):
    return HttpResponse('delete')


    urls.py:
    from django.views.generic import TemplateView       #类视图

    类视图的优点:
    代码可读性好 类视图相对于函数视图有更高的复用性,如果其他地方需要使用到某个类的某个特定方法,直接继承该类的视图就可以了
    类视图的使用 定义类视图需要继承自的Django提供的父类的View
    导入方法:
    from django.views.generic import View
    或 : from django.views.generic.base import View 配置路由时,需要使用类视图的as_view()方法来注册添加

    Django-路由指定模板
    view、TemplateView、RedirectView这三个类实现了创建Django类视图的大部分功能。可以将他们视为父视图,他们可以单独使用,也可以从中继承。 可能它们无法提供项目所需的所有功能,在这种情况下,可以使用Mixins和Generic基于类的视图。
    许多Django的内置基于类的视图都继承自其他基于类的视图或各种mixin。因为这个继承链非常重要,所以祖先类记录在祖先(MRO)的标题下。MRO Method Resolution Order的首字母缩写。
    一、View django.views.generic.base.View 基于主类的基本视图。所有其他基于类的视图都从此基类继承。它不是严格意义上的通用视图,因此也可以从中导入django.views。
    方法流程图
    dispatch()
    http_method_not_allowed()
    options()

    属性: http_method_names 此视图将接受的HTTP方法名称列表。 默认: ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']
    方法: classmethodas_view(** initkwargs) 返回一个可调用的视图,该视图接收请求并返回响应:
    response = MyView.as_view()(request)
    返回的视图具有view_class和view_initkwargs 属性。

    示例views.py:

    from django.http import HttpResponse from django.views import View
    class MyView(View):
    def get(self, request, *args, **kwargs):
    return HttpResponse('Hello, World!')

    示例urls.py:
    from django.urls import path
    from myapp.views import MyView
    urlpatterns = [ path('mine/', MyView.as_view(), name='my-view'), ] 在请求/响应周期中调用HttpRequest视图时,request 会将其分配给视图的属性。 从URL模式捕获的任何位置和/或关键字参数分别分配给 args和kwargs属性。然后dispatch() 被叫。
    dispatch(请求, args,* kwargs) view视图的一部分 - 接受request 参数和参数的方法,并返回HTTP响应。
    默认实现将检查HTTP方法并尝试委托给与HTTP方法匹配的方法; a GET将被委派给get()a,POSTto post(),等等。
    默认情况下,HEAD将委派一个请求get()。如果您需要以HEAD不同的方式处理请求GET,则可以覆盖该head()方法。有关示例,请参阅 支持其他HTTP方法。
    http_method_not_allowed(请求, args,* kwargs) 如果使用不支持的HTTP方法调用视图,则会调用此方法。
    默认实现返回HttpResponseNotAllowed纯文本中允许的方法列表。
    options(请求, args,* kwargs) 处理响应OPTIONS HTTP动词请求的句柄。返回Allow包含视图允许的HTTP方法名称列表的标头的响应。
    二、TemplateView django.views.generic.base.TemplateView 呈现给定模板,其中包含在URL中捕获的参数的上下文。
    此视图继承的视图类
    django.views.generic.base.TemplateResponseMixin
    django.views.generic.base.ContextMixin
    django.views.generic.base.View

    方法流程图
    dispatch() http_method_not_allowed() get_context_data()
    实例:views.py
    from django.views.generic.base import TemplateView
    from articles.models import Article
    class HomePageView(TemplateView):
    template_name = "home.html"

    def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    context['latest_articles'] = Article.objects.all()[:5]
    return context

    示例urls.py:
    from django.urls import path
    from myapp.views import HomePageView
    urlpatterns = [ path('', HomePageView.as_view(), name='home'), ] 三、RedirectView django.views.generic.base.RedirectView 重定向到给定的URL。
    给定的URL可能包含字典样式的字符串格式,将根据URL中捕获的参数进行插值。因为关键字插值总是完成(即使没有传入参数),
    如果给定的URL是None,Django将返回一个HttpResponseGone (410)。
    此视图继承的视图类
    django.views.generic.base.View 方法流程图
    dispatch()
    http_method_not_allowed()
    get_redirect_url()

    示例views.py:
    from django.shortcuts import get_object_or_404 from django.views.generic.base import RedirectView
    from articles.models import Article
    class ArticleCounterRedirectView(RedirectView):
    permanent = False
    query_string = True
    pattern_name = 'article-detail'

    def get_redirect_url(self, *args, **kwargs):
    article = get_object_or_404(Article, pk=kwargs['pk'])
    article.update_counter()
    return super().get_redirect_url(*args, **kwargs)

    示例urls.py:
    from django.urls import path from django.views.generic.base import RedirectView
    from article.views import ArticleCounterRedirectView, ArticleDetail
    urlpatterns = [ path('counter//', ArticleCounterRedirectView.as_view(), name='article-counter'), path('details//', ArticleDetail.as_view(), name='article-detail'), path('go-to-django/', RedirectView.as_view(url='https://djangoproject.com'), name='go-to-django'), ] 属性
    url 要重定向到的字符串作为字符串。如果是None引发410(Gone)HTTP错误。
    pattern_name 要重定向到的URL模式的名称。使用与此视图传入的相同的args和kwargs将完成反转。
    permanent 重定向是否应该是永久性的。这里唯一的区别是返回的HTTP状态代码。 如果True,那么重定向将使用状态代码301.如果False,则重定向将使用状态代码302.默认情况下,permanent是False。
    query_string 是否将GET查询字符串传递给新位置。如果 True,则查询字符串将附加到URL。如果False,则丢弃查询字符串。默认情况下query_string是 False。
    方法
    get_redirect_url( args,* kwargs) 构造重定向的目标URL。
    默认实现url用作起始字符串,并%使用URL中捕获的命名组在该字符串中执行命名参数的扩展。
    如果url未设置,则get_redirect_url()尝试反转 pattern_name使用URL中捕获的内容(使用已命名和未命名的组)。
    如果请求query_string,它还会将查询字符串附加到生成的URL。子类可以实现他们希望的任何行为,只要该方法返回可重定向的URL字符串即可。

  • 相关阅读:
    JS for循环删除数组元素
    InteliJ idea import project 找不到文件结构解决办法
    JSONP 实例
    JSONP 回调给全局变量赋值失败解决
    记用ajax网页跳转大坑——后台执行了,但是没有跳转
    web服务器无法显示font-awesome字体图标
    记 fastjson泛型转对象 第一次可以正常转,第二次就变成JSONArray 问题
    java与mysql时间类型对应的问题
    idea 配置springmvc+mybatis(图文教程)
    (转载)Android学习笔记⑨——android.content.ActivityNotFoundException异常处理
  • 原文地址:https://www.cnblogs.com/wyf2019/p/10959536.html
Copyright © 2020-2023  润新知