django框架基础
Posted wyb666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django框架基础相关的知识,希望对你有一定的参考价值。
内容:
1.课前复习
2.django路由规则
3.django视图函数
4.django ORM
django预备知识:https://www.cnblogs.com/wyb666/p/9444150.html
django基础参考:http://www.cnblogs.com/wupeiqi/articles/5237704.html
1.课前复习
1 一、 HTTP协议消息的格式: 2 请求(request): 3 请求方法 路径 HTTP/1.1 4 k1:v1 5 ... 6 7 请求体 <-- 可以有,可以没有 8 9 响应(response): 10 HTTP/1.1 状态码 状态描述符 11 k1:v1 12 Content-Type: text/html; charset=utf8 13 14 响应正文 <-- HTML内容 15 16 17 二、Python web框架的本质: 18 a. 收发socket消息 --> 按照HTTP协议消息格式去解析消息 19 b. 路径和要执行的函数的对应关系 --> 主要的业务逻辑 20 c. 字符串替换 --> 模板(特殊符号 --> 数据) 21 22 23 三、一个完整得请求流程: 24 0. 启动服务端,等待客户端(用户的浏览器)来连接 25 1. 在浏览器地址栏输入URL,与服务端建立连接,浏览器发送请求 26 2. 服务端收到请求消息,解析请求消息,根据路径和函数的对应关系,找到将要执行的函数 27 3. 执行函数,打开HTML文件,进行字符串替换,得到一个最终要返回的HTML内容 28 4. 按照HTTP协议的消息格式要求,把HTML内容回复给用户浏览器(发送响应) 29 5. 浏览器收到响应的消息之后,按照HTML的规则渲染页面. 30 6. 关闭连接
程序目录:
2.django路由规则
在django程序中,可以通过urls.py文件对所有的url进行任务的分配,根据路由规则的定义选择不同的业务处理函数进行处理
关于路由规则的详细内容:https://www.cnblogs.com/CongZhang/p/5940794.html
1 1、单一路由对应: 2 url(r‘^index$‘, views.index), 3 url(r‘^index/‘, views.index), 4 5 6 2、基于正则的路由: 7 url(r‘^index/(d*)‘, views.index), 8 url(r‘^manage/(?P<name>w*)/(?P<id>d*)‘, views.manage), 9 10 11 3、添加额外的参数: 12 url(r‘^manage/(?P<name>w*)‘, views.manage,{‘id‘:333}), 13 14 15 4、为路由映射设置名称: 16 url(r‘^home‘, views.home, name=‘h1‘), 17 url(r‘^index/(d*)‘, views.index, name=‘h2‘), 18 设置名称之后,可以在不同的地方调用,如: 19 模板中使用生成URL {% url ‘h2‘ 2012 %} 20 函数中使用生成URL reverse(‘h2‘, args=(2012,)) 路径:django.urls.reverse 21 Model中使用获取URL 自定义get_absolute_url() 方法: 22 class NewType(models.Model): 23 caption = models.CharField(max_length=16) 24 25 26 def get_absolute_url(self): 27 """ 28 为每个对象生成一个URL 29 应用:在对象列表中生成查看详细的URL,使用此方法即可!!! 30 :return: 31 """ 32 # return ‘/%s/%s‘ % (self._meta.db_table, self.id) 33 # 或 34 from django.urls import reverse 35 return reverse(‘NewType.Detail‘, kwargs={‘nid‘: self.id}) 36 37 38 5、根据app对路由规则进行分类: 39 url(r‘^web/‘,include(‘web.urls‘)), 40 41 42 6、命名空间: 43 a. project.urls.py 44 from django.conf.urls import url,include 45 46 urlpatterns = [ 47 url(r‘^a/‘, include(‘app01.urls‘, namespace=‘author-polls‘)), 48 url(r‘^b/‘, include(‘app01.urls‘, namespace=‘publisher-polls‘)), 49 ] 50 51 b. app01.urls.py 52 from django.conf.urls import url 53 from app01 import views 54 55 app_name = ‘app01‘ 56 urlpatterns = [ 57 url(r‘^(?P<pk>d+)/$‘, views.detail, name=‘detail‘) 58 ] 59 60 c. app01.views.py 61 def detail(request, pk): 62 print(request.resolver_match) 63 return HttpResponse(pk) 64 65 以上定义带命名空间的url之后,使用name生成URL时候,应该如下: 66 v = reverse(‘app01:detail‘, kwargs={‘pk‘:11}) 67 {% url ‘app01:detail‘ pk=12 pp=99 %} 68 django中的路由系统和其他语言的框架有所不同,在django中每一个请求的url都要有一条路由映射,这样才能将请求交给对一个的view中的函数去处理。其他大部分的Web框架则是对一类的url请求做一条路由映射,从而是路由系统变得简洁
3.django视图函数
一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何东西都可以。无论视图本身包含什么逻辑,都要返回响应。
约定将视图放置在项目或APP目录中的名为views.py中(一般为了模块化都是放在APP的views里)
(1)最简单的视图函数
不论什么视图函数都包含两个对象:
- request:用户请求的相关所有信息,在django中是HttpRequest对象
- response:响应信息(字符串 or HTML or 图片、、、),在django中是HttpResponse对象
最简单的视图函数:
1 from django.shortcuts import HttpResponse 2 3 def easy_view(request): 4 # 每个视图函数都使用HttpRequest对象作为第一个参数,并且通常称之为request 5 return HttpResponse("hello world!")
视图函数,围绕着两个对象进行:HttpResponse和HttpRequest
(2)HttpRequest
属性及方法:
1 request.path 获取访问文件路径 2 request.method属性 获取请求中使用的HTTP方式(POST/GET) 3 request.body 含所有请求体信息 是bytes类型 4 request.GET GET请求的数据(类字典对象) 请求头中的url中?后面拿值 5 request.POST POST请求的数据(类字典对象) 请求体里拿值 6 7 request.FILES: 包含所有上传文件的类字典对象;FILES中的每一个Key都是<input type="file" name="" />标签中 8 name属性的值,FILES中的每一个value同时也是一个标准的python字典对象,包含下面三个Keys: 9 filename: 上传文件名,用字符串表示 10 content_type: 上传文件的Content Type 11 content: 上传文件的原始内容 12 13 request.user: 是一个django.contrib.auth.models.User对象,代表当前登陆的用户。如果访问用户当前 14 没有登陆,user将被初始化为django.contrib.auth.models.AnonymousUser的实例。你 15 可以通过user的is_authenticated()方法来辨别用户是否登陆: 16 if req.user.is_authenticated();只有激活Django中的AuthenticationMiddleware 17 时该属性才可用 18 19 request.COOKIES 包含所有cookies的标准Python字典对象;keys和values都是字符串。 20 request.session 唯一可读写的属性,代表当前会话的字典对象;自己有激活Django中的session支持时该属性才可用 21 22 request.GET.get(‘name‘) 拿到GET请求里name的值 23 如果某个键对应有多个值,则不能直接用get取值,需要用getlist,如: 24 request.POST.getlist("hobby") 25 26 27 请求url:http://127.0.0.1:8000/index.html/23?a=1 28 request.path : 请求路径 29 request.path结果为:/index.html/23 30 request.get_full_path() 31 request.get_full_path()结果为:/index.html/23?a=1
(3)HttpResponse
对于HttpRequest请求对象来说,是由django自动创建的,但是,HttpResponse响应对象就必须我们自己创建。每个view请求处理方法必须返回一个HttpResponse响应对象。HttpResponse类在django.http.HttpResponse
可以由HttpResponse对象上扩展出多种常用方法:
HttpResponse函数:
render函数:
redirect函数:
对比render和redirect:
4.django ORM
(1)什么是ORM
(2)
(3)
以上是关于django框架基础的主要内容,如果未能解决你的问题,请参考以下文章