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 :更新部分数据
"""
Django路由及函数视图的更多相关文章
- Django 路由系统URL 视图views
一.Django URL (路由系统) URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表:你就是以这种方式告诉Djan ...
- Django路由配置系统,视图函数
一.路由配置系统(URLconf) URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个 ...
- Django路由配置系统、视图函数
一.路由配置系统(URLconf) URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个 ...
- django目录下的路由系统和视图函数
一.Django路由系统(url) 1.什么是路由系统 路由系统的本质是URL模式以及要为该URL模式调用的视图函数之间的一个映射表即不同的url路径对应的不同的函数,该路由系统是存放在全局配置文件u ...
- Django(二)路由系统、视图、模板
大纲 一.内容概要: 二.上节回顾 三.Django 视图–views 1.获取用户多个数据及文件上传 2.FBV 和 CBV 3.装饰器 四.Django模板补充 - Django模板语言循 ...
- Django框架----路由系统、视图和模板(简单介绍)
一.路由配置系统(urls) URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表: 你就是以这种方式告诉Django,对于这个URL ...
- 【python】-- Django路由系统(网址关系映射)、视图、模板
Django路由系统(网址关系映射).视图.模板 一.路由系统(网址关系映射) 1.单一路由对应: 一个url对应一个视图函数(类) urls.py: url(r'^test', views.test ...
- Django 框架篇(四) : 视图(view)详解 以及 路由系统(url)
|--Django的View(视图) |-- CBV和FBV: |-- 给视图增加装饰器: |-- request对象: |-- response对象: |-- Django的路由系统(url): | ...
- Django系列(二):Django的路由层,视图层和模板层
1.Django的路由层 URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:我们就是以这种方式告诉Django,对于客户端发来的某 ...
随机推荐
- 简易的CRM系统案例之SpringMVC+JSP+MySQL+myBatis框架版本
主要对上一版DAO框架的替换hibernate变成myBatis 简易的CRM系统案例之SpringMVC+JSP+MySQL+hibernate框架版本 src/mybatis.xml <?x ...
- [Java复习] 分布式锁 Zookeeper Redis
一般实现分布式锁都有哪些方式? 使用 Redis 如何设计分布式锁?使用 Zookeeper 来设计分布式锁可以吗? 这两种分布式锁的实现方式哪种效率比较高? 1. Zookeeper 都有哪些使用场 ...
- 丢失libiconv-2.dll解决办法以及无法定位输入点libiconv-2.dll到动态链接库
摘自https://blog.csdn.net/mengxiangjia_linxi/article/details/78147348 丢失libiconv-2.dll解决办法以及无法定位输入点lib ...
- logging日志管理
日志:记录系统运行时的信息的(调试信息和异常信息) 基本用法: import logging logging.debug("这是一条调试信息") logging.info(&quo ...
- 浏览器最小显示12px字体的解决方法
今天做打印标签,发现浏览器最小字体限制了12px,标签那么小,12px随便几个字就给占满了: 最后通过 transform:scale(1,0.8) 搞定: 这个属性允许将元素移动.压缩.旋转:这里 ...
- 利用socket编程在ESP32上搭建一个TCP客户端
通过之前http://www.cnblogs.com/noticeable/p/7636582.html中对socket的编程,已经可以知道如何通过socket编程搭建服务器和客户端了,现在,就在ES ...
- 使用JavaScript实现量化策略并发执行
本文代码和文章发在FMZ发明者比特币量化交易平台上: 使用JavaScript实现量化策略并发执行--封装Go函数 - 发明者量化 https://www.fmz.com/digest-topic/3 ...
- 2019年12月4日 Linux总结
System V init运行级别 systemd目标名称 作用 0 runlevel0.target,poweroff.target 关机 1 runlevel1.target,poweroff.t ...
- APK在Android Studio下如何签名
apk签名的意义 Android系统要求每一个Android应用程序必须要经过数字签名才能够安装到系统中,也就是说如果一个Android应用程序没有经过数字签名,是没有办法安装到系统中的! Andro ...
- Red Hat Enterprise 6.5 在虚拟机上将系统语言修改为中文
Red Hat Enterprise 6.5 在虚拟机上将系统语言修改为中文 说明:本文是个人在使用RedHat时候为方便而设置的,作为学习札记记录. 在虚拟机安装RedHat时候会跳过语言的安装选项 ...