zoukankan      html  css  js  c++  java
  • web前端基础知识-(七)Django进阶

    通过上节课的学习,我们已经对Django有了简单的了解,现在来深入了解下~

    1. 路由系统

    1.1 单一路由对应

    1
    url(r'^index$', views.index),

    1.2 基于正则的路由

    1
    2
    url(r'^index/(d*)', views.index),
    url(r'^manage/(?P<name>w*)/(?P<id>d*)', views.manage),
    • 找到urls.py文件,修改路由规则
    1
    2
    3
    4
    5
    6
    7
    8
    from django.conf.urls import url,include
    from django.contrib import admin
    from cmdb import views
      
    urlpatterns = [
        url(r'^index', views.index),
        url(r'^detail-(d+).html/', views.detail),
    ]
    • 在views.py文件创建对应方法
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    USER_DICT = {
        '1':{'name':'root1','email':'root@live.com'},
        '2':{'name':'root2','email':'root@live.com'},
        '3':{'name':'root3','email':'root@live.com'},
        '4':{'name':'root4','email':'root@live.com'},
    }
      
    def index(request):
        return render(request,"index.html",{"user_dict":USER_DICT})
      
    def detail(request,nid):  # nid指定的是(d+)里的内容
        detail_info = USER_DICT[nid]
        return render(request, "detail.html", {"detail_info": detail_info})

    1.3 url分组

    在url.py增加对应路径

    1
    2
    3
    4
    5
    6
    7
    8
    from django.conf.urls import url,include
    from django.contrib import admin
    from cmdb import views
      
    urlpatterns = [
        url(r'^index', views.index),
        url(r'^detail-(?P<nid>d+)-(?P<uid>d+).html/', views.detail),<br>   # nid=d+ uid=d+
    ]

    在views.py文件创建对应方法

    1
    2
    3
    4
    5
    6
    def detail(request,**kwargs):
        print(kwargs)         
        #{'nid': '4', 'uid': '3'}
        nid = kwargs.get("nid")
        detail_info = USER_DICT[nid]
        return render(request, "detail.html", {"detail_info": detail_info})

    1.4 为路由映射名称

    1
    2
    3
    4
    5
    6
    7
    8
    9
    from django.conf.urls import url,include
    from django.contrib import admin
    from cmdb import views
      
    urlpatterns = [
        url(r'^asdfasdfasdf/', views.index, name='i1'),     #第一种方式i1
        url(r'^yug/(d+)/(d+)/', views.index, name='i2'),  #第二种方式i2
        url(r'^buy/(?P<pid>d+)/(?P<nid>d+)/', views.index, name='i3'),    #第三种方式i3
    ]

    在templates目录下的index.html

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <body>
    {#第一种方法i1       路径asdfasdfasdf/#}
    {#<form action="{% url "i1" %}" method="post">#}
    {#第二种方法i2       路径yug/1/2/#}
    {#<form action="{% url "i2" 1 2 %}" method="post">#}
    {#第三种方法i3       路径buy/1/9//#}
    <form action="{% url "i3" pid=1 nid=9 %}" method="post">
        <p><input  name="user" type="text" placeholder="用户名"/></p>
        <p><input  name="password" type="password" placeholder="密码"/></p>
        <p><input type="submit" value="提交"/></p>
    </form>
    </body>

    1.5 根据app对路由分类

    主程序urls.py文件

    1
    2
    3
    4
    5
    6
    from django.conf.urls import url,include
    from django.contrib import admin
      
    urlpatterns = [
        url(r'^monitor/', include('monitor.urls')), #调整到monitor目录中的urls.py文件
    ]

    cmdb下的url.py文件

    1
    2
    3
    4
    5
    6
    7
    from django.conf.urls import url
    from django.contrib import admin
    from monitor import views
    #
    urlpatterns = [
        url(r'^login', views.login),
    ]

    1.6 获取当前URL

    view.py中配置

    1
    2
    3
    4
    def index(request):
        print(request.path_info)    #获取客户端当前的访问链接
        # / index
        return render(request,"index.html",{"user_dict":USER_DICT})

    在templates目录下的index.html文件

    1
    2
    3
    4
    5
    <form action="{{ request.path_info }}" method="post">
        <p><input  name="user" type="text" placeholder="用户名"/></p>
        <p><input  name="password" type="password" placeholder="密码"/></p>
        <p><input type="submit" value="提交"/></p>
    </form>

    2. 视图

    2.1 获取用户请求数据

    request.GET

    request.POST

    request.FILES 

    其中,GET一般用于获取/查询 资源信息,而POST一般用于更新 资源信息 ; FILES用来获取上传文件;

    2.2 checkbox等多选的内容

    在templates目录下创建login.html

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <form action="/login" method="POST" >
            <p>
                男:<input type="checkbox"  name="favor" value="11"/>
                女:<input type="checkbox" name="favor" value="22"/>
                人妖:<input type="checkbox" name="favor" value="33"/>
            </p>
            <input type="submit" value="提交"/>
        </form>
    </body>
    </html>

    修改views.py文件对表单处理

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def login(request):
        #checkbox  多选框
        if request.method == "POST":
            favor_list = request.POST.getlist("favor")      #getlist获取多个值
            print(favor_list)           #多选框获取到的是列表格式
            #['11', '22', '33']
            return render(request,"login.html")
        elif request.method == "GET":
            return render(request,"login.html")
        else:
            print("other")

    2.3 上传文件

    1
    2
    3
    4
    文件对象 = reqeust.FILES.get()
    文件对象.name
    文件对象.size
    文件对象.chunks()

    在templates目录下创建login.html

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <form action="/login" method="POST" enctype="multipart/form-data">
            <p>
                <input type="file" name="files"/>
            </p>
            <input type="submit" value="提交"/>
        </form>
    </body>
    </html>

    修改views.py文件对表单处理

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    def login(request):
        #file 上传文件
        if request.method == "POST":
            obj = request.FILES.get('files')       #用files获取文件对象
            if obj:
                print(obj, type(obj), obj.name)
                # test.jpg <class 'django.core.files.uploadedfile.InMemoryUploadedFile'> test.jpg
                import os
                file_path = os.path.join('upload', obj.name)
                f = open(file_path, "wb")
                for item in obj.chunks():      #chunks表示所有的数据块,是个迭代器
                    f.write(item)
                f.close()
            return render(request,"login.html")
        elif request.method == "GET":
            return render(request,"login.html")
        else:
            print("other")

    2.4 FBV & CBV

    2.4.1 FBV

    1.在templates目录下创建home.html文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <form action="/home/" method="POST">
        <p>
            <input type="text" name="user" placeholder="用户名"/>
        </p>
        <p>
            <input type="password" name="pwd" placeholder="密码"/>
        </p>
        <p>
            <input type="submit" value="提交">
        </p>
    </form>
    </body>
    </html>

    2. 在urls.py文件增加home路径

    1
    2
    3
    4
    5
    6
    7
    8
    from django.conf.urls import url,include
    from django.contrib import admin
    from cmdb import views
      
    urlpatterns = [
         # 固定语法
        url(r'^home/', views.Home.as_view()),
    ]

    3. 在views.py文件创建函数Home

    1
    2
    def home(request):
            return render(request,"home.html")

    2.4.2 CBV

    1. 在templates目录下创建home.html文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <form action="/home/" method="POST">
        <p>
            <input type="text" name="user" placeholder="用户名"/>
        </p>
        <p>
            <input type="password" name="pwd" placeholder="密码"/>
        </p>
        <p>
            <input type="submit" value="提交">
        </p>
    </form>
    </body>
    </html>

    2. 在urls.py文件增加home路径

    1
    2
    3
    4
    5
    6
    7
    8
    from django.conf.urls import url,include
    from django.contrib import admin
    from cmdb import views
      
    urlpatterns = [
         # 固定语法
        url(r'^home/', views.Home.as_view()),
    ]

    3. 在views.py文件创建类Home

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    from django.views import View
      
    class Home(View):
        # 先执行dispatch里面的内容
        def dispatch(self,request, *args, **kwargs):
            print("before")
            # 调用父类中的dispatch
            result = super(Home,self).dispatch(request, *args, **kwargs)
            print("after")
            return result
      
        # 根据反射获取用户提交方式,执行get或post方法
        def get(self,request):
            print(request.method)
            return render(request,"home.html")
      
        def post(self,request):
            print(request.method)
            return render(request,"home.html")
  • 相关阅读:
    浅析区间问题
    关于参加信息竞赛
    路爷爷语录
    CentOS-7安装python虚拟环境
    开发笔记(不定时更新)
    Redis有序集合的权重值选择
    数据缓存(Redis)流程设计--思路
    Flask框架之配置日志信息
    Flask框架之一对多关系模型定义
    Flask框架之多对多关系模型类的定义
  • 原文地址:https://www.cnblogs.com/wangsen-123/p/6215349.html
Copyright © 2011-2022 走看看