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框架基础的主要内容,如果未能解决你的问题,请参考以下文章

web框架之--Django基础入门

Django基础篇

Django基础

01.Django-基础

python django基础

01-Django-基础篇-Web框架简介