zoukankan      html  css  js  c++  java
  • Django路由及函数视图

    路由系统

    在django中,uri与逻辑函数的对应关系我们称之为路由系统

    伪静态

    伪静态是相对于静态文件来说的,例如https://www.cnblogs.com/hesujian/p/11165818.html

    我们就称之为伪静态,因为他其实不是html静态页面,只是伪装成html静态页面

    伪静态的好处:

      1、美观(传统的问号拼接看起来比较杂乱)

      2、seo(搜索引擎优化技术),搜索引擎比较喜欢收录静态页面,所以大家都做成伪静态去增加收录机会

    实现伪静态以及路由分发

    既然我们已经用伪静态的url去访问服务器了,那么服务器怎么拿到需要的值

    比如我们把 :http://127.0.0.1:8000/up_student/?id=12&name=hua

    伪装成  :http://127.0.0.1:8000/up_student/12/hua/

    后台接收数据就需要用到路由分发的技术

    路由分发及在后台匹配uri时,通过正则表达式的分组,把需要的值分组,再传到处理的函数中

    代码:

    # 1、直接通过分组接收,按顺序传值
    def up_student(request,id,name):
        print(id,name)
    
    urlpatterns = [
        url(r'^up_student/(w+)/(w+)', up_student),
    ]
    # 2、我们可以通过有名分组,不用按顺序也能传值
    
    def up_student(request,name,id):
        print(id,name)
    
    urlpatterns = [
        url(r'^up_student/(?P<id>w+)/(?P<name>w+)', up_student)
    ]

    路由正则

    1、$符,以什么结尾

    url(r'^test/',test),
    # 这种在访问时在/后面加什么都可以访问
    url(r'^test/$',test)
    # 这种就是必须/结尾才可以

    2、通配

    url(r'^',test)

    通配会匹配所有的url,可以用作匹配不到url时返回的页面(404)

    所以我们通配符必须放在最后,不然他会先匹配通配,导致原有的url无法访问

    反向路由

    反向路由主要是针对form表单,当我们的uri发生变化时,所有的链接也要相应的发生变化

    所有有个反向路由,可以让form表单里的action跟随uri的变化而变化

    后台url:设置name属性

    url(r'^sdsdsdsad/',test,name="xxx")

    前端form表单:action改为随后面的name变化而变化

    <form action="{% url "login" %}" method="post">

    django创建app

    我们会把不同类型的逻辑函数和uri放到不同的文件里,这个文件就成为app

    创建有两种方式

      1、pycharm创建项目时创建,只能创建一个

      2、命令行创建,进入到项目的路径下输入

        python manage.py startapp 自定义名称

    创建完的app文件中有如下就和文件

      admin.py: 写和django-admin相关的配置

      apps: 对app的配置

      models: 数据表模型

      views: 视图函数

      tests: 测试

    路由分组

    # 先要导入include方法
    from django.conf.urls import include
    # 总urls.py
        url(r'^app01/', include('app01.urls'))
    
    # 分app urls.py
        # 导入视图函数
        from app01 import views
        url('^test',views.test)

    函数视图

    函数视图主要写一些逻辑函数,函数视图主要分为两种

    1、FBV  function based view  写函数处理逻辑

    2、CBV  class based view  通过类处理逻辑

    在CBV中

    url需要做些改变

    url(r'^login/', views.Login.as_view()),

    处理逻辑的类也需要继承View这个类

    from django.views import View
    class Login(View):
        def dispatch(self, request, *args, **kwargs):
            super(Login, self).dispatch(request, *args, **kwargs)
            # 自定制逻辑
    
        def get(self):
            pass
    
        def post(self):
            pass
    
    # 如果是get提交就进入get函数,post提交就进入post函数
    # 底层走的是dispatch函数,他会根据你的提交方式分发到不同函数里
    # 我们也可以重写这个方法,加入一些其他限制,例如限制ip等等

    提交方式

    """
    常见的几种提交方式
    get    :请求数据
    post   :提交数据
    delete :删除数据
    put    :更新数据
    patch  :更新部分数据
    """
  • 相关阅读:
    Adobe Creative Cloud for Win 解决:应用程序无法正常启动(0x0000022)。请单击“确定”关闭应用程序
    项目管理 PM 第六章 时间管理
    R for mac安装 无法争取安装Unable to install any packages 安装 r 里的 igraph 报错 ERROR: configuration failed for package ‘igraph’
    Python 相对路径的解决 “Unicode Error ”unicodeescape" codec can't decode bytes… Cannot open text files in Python 3
    GraphML入门教程
    文案——编辑——希腊字母Greek Alphabet
    Tensorflow入门
    安装Tensorflow及安装过程中的错误——ModuleNotFoundError: No module named 'tensorflow'
    基于 Virtualenv 的安装Tensorflow
    小程序--腾讯地图导航
  • 原文地址:https://www.cnblogs.com/hesujian/p/11191605.html
Copyright © 2011-2022 走看看