python框架django的使⽤_Django框架的基本使⽤,若依框架Django框架的基本使⽤,若依框架
Django框架的基本使⽤
Django是⼀个功能强⼤的web框架
框架模式
1、MVC和MTV框架
django登录注册功能MVC:Web服务器开发领域⾥著名的MVC模式,所谓MVC就是把Web应⽤分为模型(M),控制器(C)和视图(V)三层,结构说明如下:
M: models 数据库相关操作
V: views 视图,也就是业务逻辑相关操作
C: controller 控制器,也就是通过路径到对应视图函数
MTV:Django的MTV模式本质上和MVC是⼀样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同。
M: models 数据库相关操作
T: templates html⽂件相关操作(模板渲染等)
V: views 视图,也就是业务逻辑相关操作
加上⼀个url控制器,也就是通过路径到对应视图函数
2、WSGI
WSGI(Web Server Gateway Interface)就是⼀种规范,它定义了web应⽤程序与web服务器程序之间的接⼝格式,实现web应⽤程序与web服务器程序间的解耦。
开发的项⽬分为两个部分的程序
1 服务器程序 socket相关功能的模块,wsgiref、uwsgi等等,负责接收⽹络请求并解析⽹络请求相关数据,分装加⼯成⼀些可⽤的数据格式,格式⼤家都是统⼀的,⽅便应⽤程序的开发
2 应⽤程序 就是使⽤接收到的⽹络请求相关数据,进⾏逻辑代码的开发,⽐如数据库相关操作,数据结构的调整、⽂件操作等等。。。
⼀、Django的基本使⽤
1、下载的三种⽅式:
直接在pycharm中的setting中进⾏下载
在cmd中通过命令下载:pip install django==版本
在pycharm的Terminal控制台中进⾏下载(下载时要注意路径问题)
2、创建项⽬
(1)通过cmd或pycharm控制台的命令创建项⽬
先切换到要创建项⽬的⽬录下,然后执⾏创建项⽬命令:
django-admin startproject mysite # mysite是项⽬名称
创建项⽬后会⽣成如下的⽬录,当前⽬录下会⽣成mysite的⼯程,⾥⾯有个主⽬录和我们创建的项⽬⽬录同名,在项⽬⽬录下有个manage.py⽂件,在主⽬录下有settings.py\urls.py\wsgi.py,每个⽂件的功能介绍如下:
manage.py ----- Django项⽬⾥⾯的⼯具,通过它可以调⽤django shell和数据库,启动关闭项⽬与项⽬交互等,不管你将框架分了⼏个⽂件,必然有⼀个启动⽂件,其实他们本⾝就是⼀个⽂件。
settings.py ---- 包含了项⽬的默认设置,包括数据库信息,调试标志以及其他⼀些⼯作的变量。
urls.py ----- 负责把URL模式映射到应⽤程序。
wsgi.py ---- runserver命令就使⽤wsgiref模块做简单的web server,后⾯会看到renserver命令,所有与socket相关的内容都在这个⽂件⾥⾯了,⽬前不需要关注它。
⼀个django项⽬中可以有多个应⽤,每个应⽤完成项⽬的部分功能,这些功能相对于其他功能来说是相对独⽴的,但⼜同时存在于同⼀个项⽬中,每个应⽤的逻辑数据库等也都是相对独⽴的,每个应⽤都有属于⾃⼰的模块单位;开发的时候,都是通过应⽤来写逻辑
(2)通过pycharm创建django项⽬
点击File --》New Project 选择第⼆项 Django
在Location中选择选项⽬创建的地址和项⽬名
Project Interpreter:
Project Interpreter中的Newenvironment using是创建项⽬执⾏的虚拟环境
Project Interpreter中的Existing interpreter是使⽤本地的环境,也可以使⽤已创建好的虚拟环境
More Settings
Template language:模板引擎;默认是Django的Template模板引擎
如若下载jinja2模板引擎可进⾏切换,或者其他模板引擎
注:django中的模板引擎未单独封装成模块;jinja2是模仿的的django的Template
Templates folder:存放html⽂件的⽂件夹名
Application name:是创建的应⽤的应⽤名
create创建完成后执⾏即可,通过控制台显⽰的链接即可访问
3、运⾏项⽬
启动项⽬命令:
python manage.py runserver 127.0.0.1:8080
ip和port可以不⽤写,不写时默认是 127.0.0.1:8000
运⾏成功后,会看到⼀个项⽬链接,在浏览器中输⼊此链接即可访问到创建的项⽬
4、创建应⽤Application
(1)cmd或pycharm控制器Terminal中创建应⽤
要在项⽬⽬录下执⾏命令进⾏创建应⽤
python manage.py startapp 应⽤名
经常⽤到的三个⽂件
models.py 数据库相关内容
views.py 视图,业务逻辑代码相关内容
tests.py ⽤来写⼀些测试代码,⽤来测试我们⾃⼰写的视图的,⽬前⽤不到
(2)pycharm中⼿动创建应⽤
创建应⽤⽂件夹(⿏标右键使⽤python package创建)
在settings.py中到INSTALLED_APPS在其下⾯添加应⽤的配置信息
应⽤名.apps.应⽤名Config(后⾯的应⽤名的⾸字母⼤写)
5、django项⽬的导⼊
6、windows中安装不同版本的python解释器
在python3.7及以上版本中,使⽤django框架的时候,django的版本要在2.0或以上,否则会出现问题;python3.6使⽤django的1.0版本。
当想即使⽤python3.7和python3.6针对django的不同版本进⾏创建项⽬时,python解释器的安装要注意,
⼆、url路由系统
在django中,url中的路径写法是正则,正则⾥⾯有⽆名分组正则,有有名分组正则,那么对应django
中的功能,我们称之为⽆名分组路由和有名分组路由
在django的1.0版本中路由配置⽂件urls.py中使⽤的是url(),⾥⾯可以直接使⽤正则匹配路径的⽅式
⽽在django的2.0版本中路由配置⽂件urls.py中使⽤的是path(),⾥⾯不能直接使⽤正则匹配路径,如需使⽤正则路径进⾏匹配就要使⽤re_path(),使⽤前要先导⼊
1、⽆命名分组路由
看写法,urls.py⽂件中内容如下
urlpatterns = [
...
url(r'^books/(\d+)/(\d+)/', views.book),
#正则⾥⾯()分组正则,会将分组中的正则匹配到的内容作为返回值返回
]
简单分析,伪代码
'''
当⽤户请求的路径是它: /books/2019/8/
url(r'^books/(\d+)/(\d+)/', views.book), ⾥⾯做的事情如下
re.match(^books/(\d+)/,/books/2019/)
2019 和 8 作为位置参数交给了要执⾏的book视图函数
视图函数book的写法
def book(request,xx,oo):
xx = 2019
oo = 8
pass
'''
视图views.py⽂件中函数的写法
#位置传参,url中正则^books/(\d+)/(\d+)/,那么第⼀个()分组匹配到的数据,作为book函数的第⼆个参数,第⼆个()分组匹配到的数据,作为book的第三个参数
def book(request, year, month):
print('year', year, 'month', month) #year 2020
# return HttpResponse('%s所有书籍' % year)
return HttpResponse('%s年%s⽉所有书籍' % (year, month))
使⽤url路由系统时需要注意⼏个点
1. urlpatterns中的元素按照书写顺序从上往下逐⼀匹配正则表达式,⼀旦匹配成功则不再继续。
2. 若要从URL中捕获⼀个值,只需要在它周围放置⼀对圆括号(正则分组匹配)。
3. 不需要添加⼀个前导的反斜杠(也就是写在正则最前⾯的那个/),因为每个URL 都有。例如,应该是^articles ⽽不是 ^/articles。
4. 每个正则表达式前⾯的'r' 是可选的但是建议加上。
5. ^articles$ 以什么结尾,以什么开头,严格限制路径
2、有名分组路由
其实就玩得正则的有名分组,看⽰例
Urls.py⽂件中的写法
urlpatterns = [
url(r'^admin/', admin.site.urls),
# /books/2020/6/
url(r'^books/(?P\d+)/(?P\d+)/', views.book),
# {'year':2020,'month':6},url类将有名分组正则匹配出来的数据,交给了book视图函数作为关键字参数来使⽤]
View.py⽂件中函数的写法如下
# ^books/(?P\d+)/(?P\d+)/
#获取到url中的有名分组正则匹配到的数据,那么函数形参名称必须和有名分组正则的那个名称相同才可以,也就是按照上⾯的url来看的话,函数的形参必须是year和month这两个名称,并且关键字传参不需要考虑函数形参的位置
def book(request, month, year):
# print('year', year, 'month', month) #year 2020
print(request.path) #/books/2020/6/
# return HttpResponse('%s所有书籍' % year)
return HttpResponse('%s年%s⽉所有书籍' % (year, month))
3、路径中的尾部斜杠问题
我们可以通过⼀个配置项,告诉django,不要⾃动加路径后⾯的斜杠了,但是需要注意的就是你⾃⼰写的url中的正则,也别加后⾯的斜杠,不然正则匹配不到。
配置项直接写在settings配置⽂件中,任意位置
APPEND_SLASH = False #False表⽰告诉Django,不加路径后⾯的斜杠,默认值是True
5、视图函数中指定默认值
views.py⽂件:
# 在路由没有匹配任何参数的时候,num使⽤⾃⼰的默认值
def test(request, num=10):
print('number>>>',num)
return HttpResponse('test')
urls.py⽂件
# url(r'^test/', st),
url(r'^test/(\d+)/', st),
三、Django的视图
1、request的对象
常⽤的属性和⽅法
print(request) # wsgirequest对象
print(request.path) # 请求路径 #/index/
hod) # 请求⽅法
print(request.POST) # post请求提交的数据
print(request.GET) # 获取url中的查询参数 #不是针对get请求的
print(request.body) #获取http请求消息格式的请求数据部分的内容 b''
print(request.META) #请求头信息
_full_path()) # 获取完整路径(包含查询参数的) /index/?a=1&b=3 print(request.FILES) # 上传的⽂件对象数据
print(('file')) # 上传的⽂件名
#
print(('username')) # 前端中传输的username的值
print(('sex')) # 前端中单选传输的sex值
# 多选提交来的数据通过getlist来获取
print(list('hobby')) # ['2', '3']
2、response的响应
(1)常⽤⽅法
from django.shortcuts import render, HttpResponse, redirect
return HttpResponse('你好') #回复字符串
return render(request,'home.html') #回复html页⾯
#重定向⽅法,参数是个路径
return redirect('/home/') #封装了302状态码,以及浏览器要重定向的路径
(2)添加响应头键值对
ret = render(request,'home.html')
ret['a'] = 'b' #添加响应头键值对
return ret
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论