django 笔记3

FBV
    function base view

    url.py
        index -> 函数名
    view.py
        def 函数(requset):
            ...

CBV
    class base view
        /index/ -》 函数名
        /index/ -> 类 方法
######################################
from django.views import View
class Home(View):
    def dispatch(self, request, *args, **kwargs):
        #调用父类中的dispatch  此方法可以类比为装饰器
        print('before')
        result = super(Home,self).dispatch( request, *args, **kwargs)
        print('after')
        return result

    def get(self,request):
        print(request.method)
        return render(request,'home.html')

    def post(self,request):
        print(request.method)
        return render(request, 'home.html')
####################################################
    请求头
Request URL:http://127.0.0.1:8000/home/?
Request Method:GET
Status Code:200 OK
Remote Address:127.0.0.1:8000

############################################
from django.conf.urls import url
from app01 import views
urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^index/', views.index),
    url(r'^login/', views.login),
    url(r'^home/', views.Home.as_view())
]
############################################
dispatch()方法 用来反射找到get/post方法


5.装饰器

路由系统
########################################
        {% for y in user_dict.values %}  {% for y in user_dict.keys %} {% for x,y in user_dict.items %}
        <li>{{y}}</li>
        {% endfor %}

        python for i in user_dict.keys():
        python for i in user_dict.values():
        python for i,j in user_dict.items():

路由系统,URL
    1、url(r'^index/', views.index), url(r'index/', Views.Home.as_view()),  /*from django.views import View*/

    2、url(r'^index-(d+).html', Views.detail),  正则 一类 url对应一个函数 开发了个查看详细页面
    def detail(request, nid):
        detail_info = USER_DICT[nid]
        return render(request,'detail.html', {'detail_info':detail_info})

    3、分组 根据?P<nid>
    url(r'^detail-(?P<nid>d+)-(?P<uid>d+).html', views.detail), #分组
    def detail(request, nid, uid):  (#?P<nid>d+)  (?P<uid>d+) 此时就与nid uid存放位置无关啦
        pass
    def detail(request, *args, **kwargs):  #这就可以表示多个值传递 如果按顺序就放在args 为元组 如果传nid 就放在 kwargs 为字典
    return HttpResponse(kwargs['nid'])

        实战:
            a:  url(r'^detail-(d+)-(d+).html', views.detail),
                def func(request, nid, uid):
                    pass

            b:  url(r'^detail-(d+)-(d+).html', views.detail),
                def func(request,*args):
                    return HttpResponse(args[1])

            c:  url(r'^detail-(?P<nid>d+)-(?P<uid>d+).html', views.detail),
                def func(request, *args,**kwargs):
                    kwargs = {'nid':1, "uid":2}

    4、 name  对URL路由关系进行命名,****** 以后可以根据此名称生成自己想要的URL *****
            a:  <form action="{% url 'indexx' %}" method="POST">
                url(r'^index/', views.index, name='i1')
            b:  url(r'^cc/(d+)/(d+)' , views.index, name='i2'),

            c:  url(r'^dd/(?P<nid>d+)/(?P<uid>d+)' , views.index, name='i3'),

            def func(request, *args, **kwargs):
                from django.urls import reverse

                url1 = reverse('i1')  #index/
                url2 = reverse('i2', args=(1, 2,))  #cc/1/2
                url3 = reverse('i3', kwargs={"nid":1,"uid":2,}) dd/1/2

            模板语言
            xxx.html
                {% url "i1" %} #index/
                {% url 'i2' 1 2 %} #cc/1/2
                {% url nid=1 uid=2 %} #dd/1/2

            模板语言:
                {% url "indexx" %}
                {% url "indexx" 2 %}
            注:request.path_info 为当前的url  {{ request.path.info }}

    5、url的分发
    一级路径 主目录下 urls.py
    from django.contrib import admin
    from django.conf.urls import url,include
    urlpatterns = [
        url(r'^cmdb/', include("app01.urls")),
        url(r'^db/', include("app02.urls")),
    ]

    在app01下创建一个urls.py  二级路径
    from django.contrib import admin
    from django.conf.urls import url,include
    from app01 import views

    urlpatterns = [
        url(r'^login/', views.login),
    ]
原文地址:https://www.cnblogs.com/Liang-jc/p/9175570.html