django 基础框架学习 (一)
Django-01
Web框架
1.Web应⽤程序处理流程 :

2.Web框架的意义
1.⽤于搭建Web应⽤程序
2.免去不同Web应⽤相同代码部分的重复编写,只需关⼼Web应⽤核⼼的业务逻辑实现
3.Web应⽤程序的本质
1.接收并解析HTTP请求,获取具体的请求信息
2.处理本次HTTP请求,即完成本次请求的业务逻辑处理
3.构造并返回处理结果——HTTP响应
4.如何学习Web框架说明:

Django框架介绍
1.简介和特点
1.简介:
是⽤python语⾔写的开源web开发框架,并遵循MVC设计。
Django的 主要⽬的是简便、快速的开发数据库驱动的⽹站。
2.特点
重量级的Web框架,功能⻬全
遵循MVC设计
2.设计模式
MVC
MVC,其核⼼思想是分⼯、解耦,让不同的代码块之间降低耦合,增强代码的可扩展性和可移植性,实现向后兼容。
M 全拼为Model,主要封装对数据库层的访问,对数据库中的数据进⾏增、删、改、查操作。
V 全拼为View,⽤于封装结果,⽣成⻚⾯展示的html内容。
C 全拼为Controller,⽤于接收请求,处理业务逻辑,与Model和 View交互,返回结果。
MVT
M 全拼为Model,与MVC中的M 功能相同,负责和数据库交互,进⾏数据处理。
V 全拼为View,与MVC中的C 功能相同,接收请求,进⾏业务处理,返回应答。
T 全拼为Template,与MVC中的V 功能相同,负责封装构造要返回的html。
3.相关⽂档
官⽅⽹站 https://www.djangoproject.com/
GitHub源码 https://github.com/ django/ django
中⽂版⽂档 https://yiyibooks.cn/xx/Django_1.11.6/index.html
搭建Django⼯程
1.安装Django框架
创建虚拟环境 mkvirtualenv 虚拟环境名字 -p python3
安装框架 pip install django==1.11.11
2.创建Django⼯程⽬录
命令
django-admin startproject ⼯程名称
步骤
进⼊要创建⼯程的⽬录
django-admin startproject demo
启动测试服务器 python manage.py runserver
3.创建Django⼦应⽤
说明
Django的视图编写是放在⼦应⽤中的。
命令
python manage.py startapp ⼦应⽤名称
步骤
进⼊到项⽬⽬录中
python manage.py startapp users
安装⼦应⽤
INSTALLED_APPS = [
' django.contrib.admin' ,
' django.contrib.auth' ,
' django.contrib.contenttypes' ,
' django.contrib.sessions' ,
' django.contrib.messages' ,
' django.contrib.staticfiles' ,
'users.apps.UsersConfig', # 安装users应⽤
]
4.创建视图并定义路由
1.总路由⼊⼝ ROOT_URLCONF = 'demo.urls'
2.总路由定义 demo.urls
urlpatterns = [
url(r'^admin/', admin.site.urls),
# 将 users应⽤中的所有路由包含进来
url(r'^users/', include('users.urls')),]
3.⼦路由定义 Users.urls
urlpatterns = [
# url(r'^路径$', views.视图),
url(r'^index/$', views.index),
]
4.视图定义 users.views
def index(request):
"""
定义django函数视图
:param request: 传⼊到函数视图的请求对象
:return: 响应对象
"""
return HttpResponse('hello world')
配置⽂件、静态⽂件、路由说明
1.settings.py配置⽂件说明
2.静态⽂件使⽤
1.配置静态⽂件的访问
# 静态⽂件访问的路由
STATIC_URL = '/static/'
# 配置静态⽂件加载⽬录
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static_files')
]
2.准备静态⽂件1
项⽬根路径/静态⽂件夹/静态⽂件
项⽬根路径/static_files/index.html
http://127.0.0.1:8000/static/index.html
3.准备静态⽂件2
项⽬根路径/static_files/goods/detail.html
http://127.0.0.1:8000/static/goods/index.html
3.路由的使⽤
1.Django解析路由的流程 :

2.路由定义位置
1.总路由+⼦路由
总路由 url(r'^users/', include('users.urls')),
⼦路由 url(r'^index/$', views.index),
2.总路由 url(r'^users/index/$', views.index),
3.⼦路由
总路由 url(r'^', include('users.urls')),
⼦路由 url(r'^users/index/$', views.index),
3.路由解析的顺序
1.urlpatterns⾥⾯的路由解析的顺序
⾃上⽽下
urlpatterns = [
# url(r'^路径$', views.视图),
url(r'^index/$', views.index, name= 'index'),
# 以下代码演示路由⾃上⽽下匹配规则
# url(r'^say', views.say), # 这个会拦截下⾯的路由
# url(r'^sayhello', views.say_hello),
url(r'^say$', views.say), # 定义路由要指明开始和结束
url(r'^sayhello$', views.say_hello),
]
2.结论 ⼦路由需要有开始和结尾
4.路由命名空间和reverse反解析
1.定义命名空间
url(r'^users/', include('users.urls', namespace= 'users')),
url(r'^index/$', views.index, name= 'index'),
2.使⽤反向解析 'users/index/'
url = reverse('users:index')
5.路径以斜线结尾说明
1.正则匹配路由结尾带斜线,如果⽤户输⼊的URL路径没有斜线,当找不到该路由时 浏览器会⾃动的重定向到带斜线的路由
2.正则匹配路由结尾不带斜线,如果⽤户输⼊的URL路径有斜线,直接报404错误
请求对象:
1.利⽤HTTP协议向服务器传参的⼏种途径
请求⾏中的路径
查询字符串
请求体
请求头
2.使⽤正则提取URL中参数
1.位置参数
# url(r'^weather1/([a-z]+)/(\d{4})/$', views.weather),
def weather1(request, city, year):
"""读取正则中的组提取的参数"""
print( 'city=%s' % city)
print( 'year=%s' % year)
return HttpResponse('OK')
2.关键字参数
# url(r'^weather2/(?P<city>[a-z]+)/(?P<year>\d{4})/$', views.weather2),
def weather2(request, year, city):
"""读取正则中的关键字提取的参数"""
print( 'city=%s' % city)
print( 'year=%s' % year)
return HttpResponse('OK')
3.提取查询字符串参数
1.需求 提取问号后⾯的查询字符串
/weather3/beijing/2018/?a=10&b=20&a=30
2.属性 GET
request.GET
返回QueryDict类型的对象
3.QueryDict类型
可以存储⼀键⼀值和⼀键多值
提供get()⽅法 读取⼀键⼀值
提供getlist()⽅法 读取⼀键多值
4.代码演练
# /weather3/beijing/2018/?a=10&b=20&a=30
def weather3(request, year, city):
"""提取查询字符串参数"""
print( 'city=%s' % city)
print( 'year=%s' % year)
a = request.GET.get('a')
b = request.GET.get('b')
a_list = request.GET.getlist( 'a')
print( a,b,a_list)
return HttpResponse('OK')
4.提取请求体中的参数
1.提取请求体中的表单数据
1.属性
POST
request.POST
返回QueryDict类型的对象
2.代码演练
# url(r'^get_body_form/$', views.get_body_form),
def get_body_form(request):
"""演示获取请求体中的表单"""
a = request.POST.get('a')
b = request.POST.get('b')
alist = request.POST.getlist( 'a')
print(a)
print(b)
print( alist)
return HttpResponse('OK')
2.提取请求体中的⾮表单数据
1.属性
body
request.body
2.代码演练
# url(r'^get_body_json/$', views.get_body_json),
# {"a": 1, "b": 2}
def get_body_json(request):
"""演示获取请求体中的⾮表单数据"""
print(request.META['CONTENT_TYPE'])
print(request.method, request.path)
json_str = request.body
json_str = json_str.decode()
req_data = json.loads( json_str)
print(req_data['a'])
print(req_data['b'])
return HttpResponse('OK')
5.提取请求头中的信息
1.提取⽅案
2.代码实现 print(request.META['CONTENT_TYPE'])
6.其他请求报⽂信息
print(request.method, request.path)
响应对象:
1.HttpResponse
1.常规⽤法
# HttpResponse(content=响应体, content_type=响应体数据类型, status=状态码)
# 注意点:响应体参数是必传的
return HttpResponse('OK', content_type= 'text/html', status= 200)
2.⾃定义响应头
# 创建响应对象
response = HttpResponse('OK', content_type= 'text/html', status= 200)
# ⾃定义响应头:键值对;⾃定义响应头键 Itcast, 值 Python
response[' subject' ] = 'Python'
return response
2.JsonResponse
# GET /response_json/ (表示⽤户向我们索取json)
def response_json(request):
"""响应json数据"""
# 准备字典: json字符串的key,需要双引号
json_dict = {"name": " python" , "age": 25}
# 默认会设置状态码
# 默认会将数据类型设置为 Content-Type: application/json
# 默认会将json字典转json字符串, 再将json字符串转⼆进制响应给⽤户
return JsonResponse( json_dict)
3.重定向
# GET /response_redirect/
def response_redirect(request):
"""重定向"""
# 需求:重定向到users应⽤的index视图
# 使⽤最原始的⽅式
# return redirect('/users/index/')
# 使⽤反向解析实现重定向
return redirect(reverse('users:index'))
4.render 响应模板数据的,后续模板时会使⽤响应模板数据的,后续模板时会使⽤
相关源码连接:
django 基础框架学习 (一)的更多相关文章
- django 基础框架学习 (三)
Django框架基础-03数据库新增数据 1.save⽅法 >>> from datetime import date >>> f ...
- django 基础框架学习 (二)
Django框架基础-02 Django缓存cookie 1.说明 当我们服务器在响应数据的同时,希望写⼊⼀些缓存数据到客户端 我们可以选择在响应的同时,将要写⼊到客户端的 ...
- WEB框架-Django框架学习-预备知识
今日份整理,终于开始整个阶段学习的后期了,今日开始学习Django的框架,加油,你是最胖的! 1.web基础知识 1.1 web应用 Web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是 ...
- Python学习(二十六)—— Django基础一
转载自:http://www.cnblogs.com/liwenzhou/p/8258992.html 一.Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的 ...
- Django 基础 web框架本质
Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. import socket sk ...
- day 52 Django基础一之web框架的本质
Django基础一之web框架的本质 django第一天 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于D ...
- Web框架之Django_01初识(三大主流web框架、Django安装、Django项目创建方式及其相关配置、Django基础三件套:HttpResponse、render、redirect)
摘要: Web框架概述 Django简介 Django项目创建 Django基础必备三件套(HttpResponse.render.redirect) 一.Web框架概述: Python三大主流Web ...
- django基础(web框架,http协议,django安装)
学习Django之前我们先来看什么是OSI七层模型: 应用层 表示层 应用层(五层模型中把这三层合成一个应用层) http协议 会话层 传输层 提供端口对 ...
- Web框架django基础篇
基本配置及学习 路由(Urls).视图(Views).模板(Template).Model(ORM). 简介 Django 是一个由 Python 写成的开放源代码的 Web 应用框架.它最初是被开 ...
随机推荐
- (转)更改Web.config中对上传文件大小限制
.net上传超过200K的图片的时候,会跳转到404,但是url没有错误,真J8的坑啊. 本文转载自:http://www.cnblogs.com/zwffff/archive/2009/04/29/ ...
- du 命令 -目前的目录所占的磁盘空间
Linux du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的. 1.命令格式: du [选项][文件] 2.命令功能 ...
- canvas渐变
代码: 1 /** 2 * Created by Administrator on 2016/1/29. 3 */ 4 function draw(id){ 5 var canvas = docume ...
- 基于mjpg-streamer网络视频服务器移植
MJPG简介: MJPG是MJPEG的缩写,但是MJPEG还可以表示文件格式扩展名. MJPEG 全名为 "Motion Joint Photographic Experts Group&q ...
- iOS消息转发机制
iOS消息转发机制 “消息派发系统”(message-dispatch system) 若想令类能够理解某条消息,我们必须实现出对应的方法才行.但是,在编译器向类发送其无法解读的消息时并不会报错,因为 ...
- ruby on rails 中render的
Ruby rails页面跳转代码如下: 1.render(:text => string) 2.render(:inline => string, [:type => "r ...
- 开发环境入门 linux基础 (部分)网络 SSH 更名 DNS解析 元字符
nginx---> web ifconfig 查看网络配置信息 id add show 查看当前网卡信息(最小安装下) mtu 是指网卡传输的最大单元 单位:字节 网卡配置 临时配置 ifcon ...
- redmine2.3环境搭建
1. 安装redmine bitnami-redmine-2.3.0-0-windows-installer.exe安装到C:\BitNami\redmine-2.3.0-0目录下. 其中redmin ...
- 简单的windows作业管理(自己也没弄透彻)
先把代码贴出来,以后有时间再研究!简单的说,作业就相当于沙箱,可以使程序在一定范围内活动. #include "stdafx.h"#include "windows.h& ...
- Linux 正文处理命令及tar vi 编辑器 homework
作业一: 1) 将用户信息数据库文件和组信息数据库文件纵向合并为一个文件/1.txt(覆盖) cat /etc/passwd /etc/group >/1.txt 2) 将用户信息数据库文件和用 ...