-------------Django-----URLS路由
一、相约Django。
1、Django的特点:Django定义了服务分布、路由映射、模板编程、数据处理的一套完整的功能。
(1)集成数据访问组件:Django的model层自带数据库ORM组件。
(2)URL映射:Django使用正则表达式管理URL映射。
(3)后台管理系统自动生成。
2、Django的结构:Django遵循MVC架构的web开发框架。
(1)管理工具management:内置的创建站点、迁移数据、维护静态文件的命令工具。
(2)模型model:提供数据访问接口和模块。包括数据字、元数据、数据关系等。
(3)视图view:Django的视图层封装了HTTP request和response的一系列操作和数据流。主要是URL映射机制和绑定模板。
(4)模板temlate:一套Django自己的页面渲染模板语言,用内置的tags和filters定义页面的生成方式。
(5)表单form:通过内置的数据类型和控制组件生成HTML表单。
(6)管理站admin:通过声明需要管理的model,快速生成后台数据管理网站。
二、安装Django。
Mac和Linux使用命令安装:
Win安装:如果你还未安装Python环境需要先下载Python安装包。
1、Python 下载地址:https://www.python.org/downloads/
2、Django 下载地址:https://www.djangoproject.com/download/
注意:目前Django 1.6.x以上版本已经完全兼容Python 3.x。
Python 安装(已安装的可跳过):
安装Python你只需要下载python-x.x.x.msi文件,然后一直点击"Next"按钮即可。
安装完成后你需要设置Python环境变量。 右击计算机->属性->高级->环境变量->修改系统变量path,添加Python安装地址,实例使用的是C:\Python33,你
需要根据你实际情况来安装。
三、组建第一个project。
1、创建project。
(1)字符终端Termiral下可以使用命令:django-admin startproject XXOO(XXOO为项目名,看心情随意起)。
(2)创建成功后,切到项目名的路径下:cd XXOO
在正规军的当前目录中建立了一个子目录正规军,并在其中生成了Django开发的默认文件。
正规军/
manage.py :是Django用于管理本项目的命令行工具,进行站点运行,数据库自动生成、静态文件收集。
正规军/ :内层的正规军目录中,包含了本次项目的实际文件。因为有__init__.py,所有这是一个Python包。
__init__.py
settings.py : 是Django项目的配置文件,其中定义了该项目引用的Django组件和Django项目名。
urls.py : 是维护项目的URL路由映射,即定义客户端访问的URL由哪一个Python模块解释并提供反馈。默认是定义admin为管理员站点的解释器。
wsqi.py : 定义WSGI的接口信息,用于与其他web服务器集成。
2、创建应用:
(1)命令创建包名:python manage.py startapp XO(XO为包名,也就是应用包) 。
写多个包app是为了功能划分,分开不同的业务线。
该包的功能是实现具体的某些功能。例如:admin-------是Django自带的后台管理的相关配置。
model-------是根据类创建的数据库表,是写类的。
test---------是进行单元测试的。
views(视图)---这个包的函数,该包或该业务相关的具体的功能基本上都写在这。
migration-----数据库相关所使用的。
(2)views中的内容可以形成一个包,将views中的具体功能函数每一个都单独写。在使用中,可以去views中调用方法即可,可以对业务进行更细的划分。
3、
Django知识点概括:
四、Django视图层:作用是衔接HTTP请求,Python程序,HTML模板
1、路由系统URL:本质是使URL和函数对应上关系。
(1)一一对应(静态路由):为一个URL对应一个相应的函数
/login/ ----> def login()
一个login对应一个login函数
(2)URL后可以跟正则表达式(动态路由):(位置)
/login/(\正则表达式) /-----> 对应函数def
login/(\w+)/ ------> 这时的视图函数不能以get收数据,而是以参数的形式接受 下面的a1就是那个参数。有多少个正则,就多少个a ~,并且是按顺序接收 ^_^ !
def XXOO(request,a1):
print(a1)
return HttpResponse('......')
(\W+)取代了之前的?nid=XXXXX,这样起到了SEO的优化,提高页面的权重
(3)URL中的正则表达多,传递的参数多,可以对传参进行编号。(可命名)
/add—user/(?P<a1\d+)/ -----> def add_user(request,a1)
在正则前加上 ?P<a1> 的意思是在视图函数中,找参数时,及时aXXXX是无序的,也会按照a后的号码进行查找参数。
【1】终止符:在URL中加“/”或终止符$
【2】伪静态:edit/(\w+).html 其中.html 就是伪静态。
伪静态:静态网址的访问速度高于动态网址,而伪静态就是将动态网址伪装成静态网址,提高访问权重。加快访问响应。
2、3在函数中都可用*args **kwargs 取代位置参数和可命名的参数,但是在url中也要统一用法。
(4)路由分发:(可以设置默认页面)
在与项目名相同包名的url文件中,加入Django.conf.urls 中导入的include方法,在URL中写出指定的应用包名。例如app1,在使用include方法是项目包中的URL定位到app01的url并与app01中的URL相关联,
url(r'^app01/', include('app01.urls')),
它的流程是在项目中的URL中匹配出app01的url,再在app01的URL中匹配出对应URL的函数去执行。
可以指定URL,当访问的URL不存在时,可以使其跳转到指定的页面
在项目包的URL中:
from django.shortcuts import HttpResponse
def default(request):
return HttpResponse('.......')
在URL中:url(r'', default), 就可以了。
也可以使app01的错误页面跳转到指定的页面
url(r' ', include('app01.url.index')), ,就可以了。
(5)根据名称反向生成URL:(给URL定义一个名字,以后就可以通过名字找到URL,可以通过名字反生成URL)
在项目包的URL中,URL用正则接受传值,如果用(?P<a>\w+)那么在views中的函数v的值就不能是args ,而是kwargs{‘a1’:11111111}
url(r' index/(\w+)', views.index, name='n1'),
在view中
from django.urls import reverse
def index(requrest):
user_list = [
' wangzhe', ' george', ' jony'
]
v = reverse('n1',args=(XXXXXXX)) args就是参数传的值。
print(v)
return render()
在写页面是的action的URL地址就可以写成{ % url “n1”%}
在取值时也可以在a标签中写成{% url ‘n1’ i%}如果正则传多值,那“ i ”就多加几个,用空格隔开。
2、视图函数:是Django中开发者处理HTTP请求的Python函数,视图函数的功能是通过模型层对象处理数据,然后用(1直接构成HTTP body,2用数据渲染html模板文件,3如有逻辑错误,则返回http错误或其他状态)一种方法返回HttpResponse。
(1) 直接构造html页面:直接在视图函数中构造返回给客户端的字符串,通过httpresponse()函数封装后返回,给相应的服务器的时间给客户端
from Django.http import httpResponse
import datetime
def current_datetime(request):
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
return HttpResponse(now)
(2)用数据渲染HTML模板文件:模板的内容可以非常丰富,所以使用渲染模板文件的方法返回页面是最常见的Django视图函数技术,模板渲染通过render()函数实现。
from django.shortcuts import render
from app.models import Moment
def detail(request, moment_id):
m = Moment.objects.get(id = moment_id)
return render(request,'temlates/moment.html',{'headline':m.headline,'user':m.user_name})
render()函数中,第一个参数是http中的request的返回值,第二个参数是模板文件名,第三个参数是以字典形式表达的模板参数。
(3)返回HTTP错误:
HTTP错误通过HTTP头中的status表达,通过给httpresponse构造函数传递status参数,可以返回HTTP错误或状态。
from django.http import HttpResponse
def my_view(request):
return HttpResponse(status=404)
3、模板语法:
(1)变量替换:
(2)过滤器:
(3)流程控制:
(4)模板继承:
五、Django模块层:主要是ORM的操作。
1、基本操作:Django模型开发的任务就是定义模型类和属性。每个模型类都都可以映射为数据库中的一个数据表,而类属性被映射为数据字段。数据库表的主键,外键,约束,都可以通过类属性完成定义。
(1)模型类的定义:基本结构↓^_^:
from django.db import models #所有的Django模型继承都是来自Django.db models.Model类
class ModelName(models.Model):
field1 = models.XXfield(...........) #通过类属性定义模型的字段,模型的字段必须是models.XXField类型
field2 = models.XXfield(...........)
.......
class Meta: ---------------#模型类中的meta子类定义模型元数据, 可以定义数据库表名,数据默认排列方式等。meta类的属性名由Django预定义。
db_table = ...
other_metas = ...
常用的meta类的属性:
abstract: True or False 标识本类是否为抽象了。
app_label:定义本类的所属应用,比如app_label = ‘myapp’
db_table:映射的数据表名,db_table = ‘moment’
注:如何meta中不提供db_table字段,那么Django会为模型自行生成数据表名,生成的格式会为“应用名_模型名”,比如应用app的模型comment的默认数据表名为“app_comment”
(2)普通字段的类型:
(3)常用字段的参数:
(4)基本查询:
(5)数据保存及删除:
2、关系操作:
(1)一对一:
(2)一对多:
(3)多对多:
3、面向对象的ORM:
ORM(Object Relational Mapping,简称ORM)为对象关系映射,是为了解决面向对象与关系数据库之间互不匹配而产生的技术。
Django模型中的ORM之所以强大,是因为可以支持模型继承。它将Python的面向对象和数据库面向关系表的数据结构相结合。就有了ORM的三种风格。
抽象类继承:父类来自models.Model,但不会在底层数据库中生成相应的数据表,父类的属性列存储在其子类的数据表中。
多表类继承:多表继承类的每个模型都在底层数据库中生成相应的数据表管理数据。
代理模型继承: 父类用于在底层数据库中管理数据表,而子类不定义数据列,只定义查询数据集的排序方法等元数据。
(1)抽象类继承:
(2)多表类继承:
(3)代理模型继承:
-------------Django-----URLS路由的更多相关文章
- django urls路由匹配分发
django urls路由匹配分发 一.urls配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对 ...
- Django urls 路由
写url和视图的的对应关系 from django.conf.urls import url from django.contrib import admin from app名 import vie ...
- django的路由系统
在django生成的工程项目文件中urls.py文件用于指定路由信息 该文件默认导入以下模块 from confimport from import admin from confimport url ...
- Django—urls系统:urls基础
Django的urls系统简介 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映 ...
- [django]urls.py 中重定向
Django 1.5 有时候需要对一个链接直接重定向,比如首页啥的重定向到一个内容页等等,在views.py 中可以设定,如果没有参数啥的在urls.py 中设定更加方面 from django.vi ...
- Django学习之十一:真正理解Django的路由分发和反解url原理
目录 URL Dispatcher 简介 模式概念 对比URLPattern 与 URLResolver (多态的体现) 构建子路由几种方式 反解url算法逻辑 URL Dispatcher 简介 d ...
- Django 的路由层 视图层 模板层
--------------------------------------------------------------通过苦难,走向欢乐.——贝多芬 Django-2的路由层(URLconf) ...
- Django之路由分发反向解析
Django路由分发|反向解析 当一个Django中有多个app时,路由会有很多,将这些路由都写在与项目同名的文件夹下就会显得很多,很乱.并且在协同开发的时候容易出现相同的命名,当项目合并后就会出现路 ...
- django之路由层
一 Django中路由的作用 二 简单的路由配置 三 有名分组 四 路由分发 五 反向解析 六 名称空间 七 django2.0版的path 一 Django中路由的作用 URL配置(URLconf) ...
- Python学习(三十一)—— Django之路由系统
转载自:http://www.cnblogs.com/liwenzhou/p/8271147.html Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLc ...
随机推荐
- 尊重百度的api语音合成规则
屏幕显示字幕内容与形式 和 字幕的播放时长分离 : 去除标点符号的影响 # 设置分句的标志符号:可以根据实际需要进行修改 # cutlist = ".!?".decode('ut ...
- linux设备驱动模型之Kobject、kobj_type、kset【转】
本文转载自:http://blog.csdn.net/fengyuwuzu0519/article/details/74838165 版权声明:本文为博主原创文章,转载请注明http://blog.c ...
- go语言笔记——append是内置的函数!!!new是一个函数!!!调试可以使用闭包,本质上是print调试,尼玛!
内置函数 Go 语言拥有一些不需要进行导入操作就可以使用的内置函数.它们有时可以针对不同的类型进行操作,例如:len.cap 和 append,或必须用于系统级的操作,例如:panic.因此,它们需要 ...
- java调用restful接口的方法
Restful接口的调用,前端一般使用ajax调用,后端可以使用的方法如下: 1.HttpURLConnection实现 2.HttpClient实现 3.Spring的RestTemplate
- CF732 F Tourist Reform——边双连通分量
题目:http://codeforces.com/contest/732/problem/F 首先把边双缩点,边双内部 dfs 一个顺序一定是可以从每个点走到边双内部所有点的,因为它是以环为基本单位: ...
- codeforces round #416 div2
A:暴力模拟 #include<bits/stdc++.h> using namespace std; int a, b; int main() { scanf("%d%d&qu ...
- IDEA Spark Streaming 操作(套接字流)-----make socket数据源
import java.io.PrintWriter import java.net.ServerSocket import scala.io.Source object DStream_makeSo ...
- Sublime Text 汉化插件
https://blog.csdn.net/heyangyi_19940703/article/details/51869502 一.Sublime Text工具介绍: Sublime Text 是一 ...
- target属性打开方式
在HTML中target目标的四个参数的用法:1.target="_self"表示:将链接的画面内容,显示在目前的视窗中.(内定值) . 即:同(自己)窗口打开,别的数据还存在,相 ...
- Saiku导出excel指标列无线条以及0与空值显示问题(三十二)
Saiku导出excel指标列无线条以及0与空值显示问题 描述: 数据库中字段值为0 ,与数据库中字段值为 null 时 ,saiku会将为0 以及为 null 的数据都不展示出来,但是我们其实希望数 ...