• day64 Pyhton 框架Django 07


    day67
    
    内容回顾
    
    视图
    
    1. CBV
    
    定义
    
        from django.views import View
        
        class Addpub(View):
            
            def get(self,request):
                self.request
                return response
            
            def post(self,request):
                return response
    
    使用:
    
    from app01 import views
    
    url(r'^add_pub/',views.Addpub.as_view())
    
    2. as_view()的流程:
    
    1. Addpub.as_view()执行   ——》  view函数
    2. 请求到来的时候,执行view函数:
       1. Addpub(*。**)——》 self
       2. self.request = request
       3. 执行self.dispatch(request.*args,**kwargs)   ——》   Addpub中有 执行自己的dispatch,没有执行父类的
          1. 判断请求方式  http_method_names = [ 'get','post' ]
             1. 允许:
                通过反射获取到对应请求方式(get/post)对应的方法  ——》 handler
             2. 不允许:
                    http_method_not_allowed  —— 》 handler
          2. 执行handler   ——》 返回response响应
    
    3. 加装饰器的方式
    
    from django.utils.decorators import method_decorator
    
    1. 直接加在方法上
    
        @method_decorator(timer)
        def get(self, request):
    
    1. 加在dispatch方法上
    
        @method_decorator(timer)
        def dispatch(self, request, *args, **kwargs):
            # start = time.time()
            ret = super().dispatch(request, *args, **kwargs)
            # print('所用时间:{}'.format(time.time() - start))
        
            return ret
    
    1. 加在类上
    
        @method_decorator(timer, 'post')
        @method_decorator(timer, 'get')
        class AddPublisher(View):
    
    4. request 对象
    
    1. request .method   ——》 请求方式   POST GET
    2. request .GET      ——》 url上携带的参数
    3. request .POST   ——》  POST请求提交的数据
    4. request .body   ——》 请求体
    5. request .FILES   ——》 上传的文件
       1. enctype = 'mutlipart/form-data'
       2. POST     {% csrf_token %}
       3. 使用文件对象 chunks()
    6. request.path_info    ——》 url路径  不包含IP和端口、参数
    7. request.COOKIES
    8. request.session
    9. request.get_full_path()    ——》 url路径  不包含IP和端口  包含参数
    10. request.get_host()       ——》 主机的ip和端口
    11. request.is_ajax()         ——》 是否是ajax请求
    
    5. response对象
    
    1. HttpResponse()     ——》 返回字符串   Content-Type = 'text/html'
    2. render(request,'HTML文件名',{   })    ——》 返回完整的HTML页面
    3. redirect(‘要跳转的地址’)  ——》 重定向    Location :地址 
       1. ret = HttpResponse('')   ret['Location ']  = ' 地址'   
    4. JsonRespinse(字典)      JsonRespinse([] ,safe=False )      Content-Type = 'application/json'
    
    路由
    
        from django.conf.urls import url
        from django.contrib import admin
        from app01 import views
        
        urlpatterns = [
            url(r'^admin/', admin.site.urls),
            url(r'^blog/$', views.blogs),
            # url(r'^blog/([0-9]{4})/([0-9]{2})/$', views.blog),
            url(r'^blog/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.blog),
        ]
    
    正则
    
    ^   $  asd  d    +   ?   *     .   
    
    分组和命名分组
    
        url(r'^blog/([0-9]{4})/([0-9]{2})/$', views.blog),   #  位置参数传参
    
        url(r'^blog/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.blog),   # 关键字传参
    
    从URL上捕获的参数是字符串
    
    include   —— 路由分发
    
        urlpatterns = [
            url(r'^app01/', include('app01.urls')),
            # url(r'^app02/', include('app02.urls')),
            # url(r'^', include('app01.urls')),
        ]
    
        urlpatterns = [
        
            url(r'^publisher/', views.publisher),
            # url(r'^add_publisher/', views.add_publisher),
            url(r'^add_publisher/', views.AddPublisher.as_view()),
            # url(r'^add_publisher/', views.view),
            url(r'^del_publisher/(d+)/', views.del_publisher),
            url(r'^edit_publisher/', views.edit_publisher),
        
            url(r'^test/', views.test), ] 
    
    今日内容
    
    1. url命名和反向解析
    
        from django.urls import NoReverseMatch, reverse
    
    普通URL:
    
    命名:
    
        url(r'^blog/$', views.blogs, name='xxxxx'),
    
    反向解析
    
    视图中:
    
        reverse('xxxxx')    ——》   ‘/blog/’
    
    模板中:
    
        {% url 'xxxxx' %}
    
    分组:
    
    命名:
    
         url(r'^blog/([0-9]{4})/([0-9]{2})/$', views.blog, name='blog'),
    
    反向解析
    
    视图中:
    
        reverse('blog',args=('2019','01'))    ——》   ‘/blog/2019/01/’
    
    模板中:
    
        {% url 'blog' '2018' '12' %}    ——》 /blog/2018/12/
    
    分组:
    
    命名分组:
    
         url(r'^blog/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.blog, name='blog'),
    
    反向解析
    
    视图中:
    
        reverse('blog',args=('2019','01'))    ——》   ‘/blog/2019/01/’
    
        reverse('blog',kwargs={'year':'2018','month':12})    ——》   ‘/blog/2018/12/’
    
    模板中:
    
        {% url 'blog' '2018' '12' %}    ——》 /blog/2018/12/
    
        {% url 'blog' year='2018' month='12' %}    ——》 /blog/2018/12/
    
            {% url 'blog' month='12'  year='2018' %}    ——》 /blog/2018/12/
    
    2. namespace
    
        url('app01/', include('app01.urls', namespace='app01')),
        url('app02/', include('app02.urls', namespace='app02'))
    
    视图:
    
        reverse('app01:home')
    
    模板
    
        {% url 'app01:home' %}
    
    ORM
    
        类  ——》 表
    
        对象 ——》 数据行 
    
        属性 ——》 字段
    
    常用的字段
    
        AutoField
        IntegerField
        BooleanField
        CharField
        DateTimeField
        DateField
        DecimalField
        FloatField
    
    字段和model的参数
    
    见博客
    
    必知必会13条
    
    见代码
    
    单表的双下划线
    
        ret = models.Person.objects.filter(pk__gt=100)    # greater than
        ret = models.Person.objects.filter(pk__lt=103)    # less than
        ret = models.Person.objects.filter(pk__gte=100)    # greater than  equal
        ret = models.Person.objects.filter(pk__lte=103)    # less than  equal
        
        ret = models.Person.objects.filter(pk__in=[100,103])
        
        ret = models.Person.objects.filter(pk__gte=100,pk__lte=103)
        ret = models.Person.objects.filter(pk__range=[100,103])
        
        ret = models.Person.objects.filter(name__contains='L')
        ret = models.Person.objects.filter(name__icontains='L')
        
        ret = models.Person.objects.filter(name__startswith='x')
        ret = models.Person.objects.filter(name__istartswith='X')
        
        ret = models.Person.objects.filter(name__endswith='x')
        ret = models.Person.objects.filter(name__iendswith='X')
        
        ret = models.Person.objects.filter(birth__contains='2019-01-24')
        
        ret = models.Person.objects.filter(age__isnull=False)
  • 相关阅读:
    mvc的cshtml Request取不到值
    entityframework导航属性筛选
    关于引用类型一个有意思的测试
    如何去除decimal后面的零?
    webapi调用post时自动匹配参数
    entityframework删除时提示“DELETE 语句与 REFERENCE 约束”的解决方法。
    FormsAuthenticationTicket学习笔记
    mvc部署
    redis 订阅发布 事务 WATCH 乐观锁
    idea==>gitee
  • 原文地址:https://www.cnblogs.com/pythonz/p/10317119.html
Copyright © 2020-2023  润新知