设计模式 和 框架模式
设计模式:是一套反复使用,多人知晓并经过分类的代码设计经验的总结,是为了解决一些通用问题。
目的:重用代码并保证可靠性
官方认证的设计模式有23种,单例模式,抽象工厂模式… …
框架模式:代码的重用,框架模式是解决如何设置程序框架的代码,在框架中包含很多种设计模式:如 MVC MTV MVVM ORM… …
MVC:
Model:模型层,在程序中主要处理数据,负责在数据库进行数据的CRUD
View:视图层,应用程序中处理显示的内容(html)
Controller:控制层,处理用户交互的部分,负责从模型中取出数据,在进行业务的处理,最后将数据给视图层,并将视图响应给客户端。
MTV:
Model:模型层,在程序中主要处理数据,负责在数据库进行数据的CRUD
Template:模板层,用于处理用户显示的部分内容,如html
View:视图层,处理用户交互,从模型中获取数据,再将数据给模板,再显示给用户
MVVM:
ModelView
Model
View
url函数
url(regex,views,kwargs=none,name=none)
regex:正则表达式,匹配请求的url
views:url的处理函数,通常都是自定义的
kwagrs:字典,用来项views传参
name:字符串。给url起一个别名,主要在模板中配合{% url%}一起使用
url项views传参的方式(请求信息中带有数据,处理函数可以获得这些数据)
使用正则表达式传参(使用正则表达式的子组 () )
urls.py 中使用 url() ,正则限定写在()中,如 (\d+) ,意为匹配1个或者多个数字,$ 表示结束。此处可以匹配到路径/first_agrs/123/,注:使用 url() 需要导入相应的包:from django.conf.urls import url
views.py 中使用 HttpResponse 传递简单的响应,数据即为 url 中 (\d+) 部分输入的内容。同样,使用 HttpResponse 需要导入相应的包 from django.http import HttpResponse
# urls.py中核心代码
url(r"^first_agrs/(\d+)/$",first_agrs_view),
# views.py中核心代码
def first_agrs_view(request,num):
return HttpResponse("传递过来的数据是:"+num)
urls.py 中使用 url() ,正则限定写在()中,如 (\w{2,3}) ,意为匹配2个或3个字母、数字、下划线,$ 表示结束。此处可以匹配到路径/first_agrs/123/,注:使用 url() 需要导入相应的库函数:from django.conf.urls import url。踩坑:之前不知道哪里敲错了,死活不显示,重新打了一遍代码解决。
views.py 中使用 HttpResponse 传递简单的响应,数据即为 url 中 (\w{2,3}) 与 (\d+) 部分输入的内容。同样,使用 HttpResponse 需要导入相应的包 from django.http import HttpResponse
# urls.py中核心代码
url(r"^second_agrs/(\w{2,3})/(\d+)/$",second_agrs_view),
# views.py中核心代码
def second_agrs_view(request,num1,num2):
return HttpResponse("传递过来的数据是:" + num1+","+num2)
使用字典关键字传参
urls.py 中使用 url() ,此处可以匹配到路径/third_agrs/
views.py 中使用 HttpResponse 传递简单的响应,此处 name 、 age 接收 url 中的字典数值。同样,使用 HttpResponse 需要导入相应的包 from django.http import HttpResponse
# urls.py中核心代码
url(r"^third_agrs/$",third_agrs_views,{"name":"张三","age":"18"}),
# views.py中核心代码
def third_agrs_views(request,name,age):
return HttpResponse("传递过来的数据是:" + name + "," + age)
应用是一个门户网站的一个独立的模块,包含独立的显示信息,在项目的主文件夹一般不处理其他的请求,主要做初始化的设置,一级地址分发等操作,会将请求交给不同的模块去完成。
创建应用:命令:python manage.py startapp bbs(创建一个bbs应用)
在项目主文件夹的settings.py中的INSTALLED_APPS追加 ‘bbs’应用
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'bbs',
在项目主文件夹的urls.py中配置相关请求的派发,例如
url(r"^bbs/",include(“bbs.urls”)),此配置会将bbs/ 开头的请求派发到bbs应用中进一步进行处理
注:include需要引入模块:from django.conf.urls import url,include
在bbs应用文件夹中创建urls.py并进行进一步的请求处理函数的配置,例如:url("^index/$",index_views)
模板Template,是一个网页,可以被view响应给前端,目的就是为了解决复杂的显示问题。
模板的设置:指定搜索引擎,指定模板的存放目录,指定从何处开始查找。
模板的加载:
使用loader()获取模板,通过HttpResponse进行响应
# views.py中核心代码
# 使用 loader 获取模板,通过 HttpResponse 进行响应
def music_show_views(request):
# 1.通过loader获取模板
t = loader.get_template("music.html")
#name author player要与html中的对应
dict = {
"name":"有何不可",
"author":"许嵩",
"player":"许嵩"
}
# 2.将模板转换成字符串,使用一个字典类型的参数
html = t.render(dict)
# 3.将字符串响应
return HttpResponse(html)
通过render()直接加载
# views.py中核心代码
# 通过 render() 直接加载
def music_show_views(request):
#name author player要与html中的对应
dict = {
"name":"有何不可",
"author":"许嵩",
"player":"许嵩"
}
return render(request,"music.html",dict)
模板、视图、url 综合使用:
应用music中的 templates 文件夹下 music.html
歌曲信息歌曲名:《{{ name }}》
作者: {{ author }}
演唱者: {{ player }}
应用music中的 views.py
def music_show_views(request):
#t = loader.get_template("music.html")
dict = {
"name":"有何不可",
"author":"许嵩",
"player":"许嵩"
}
#html = t.render(dict)
#return HttpResponse(html)
return render(request,"music.html",dict)
应用music中的 urls.py
#核心代码
url("^show_music/$",music_show_views,name="music"),
项目主 urls.py
url(r"^music/",include("music.urls")),
url的最后一个参数name,表示这个url的别名。
模板文件一般自己新建文件夹,里面存放.html文件。允许在模板中使用该别名来找到相应的url,在django的模板(templates.py)中语法为:{% url ‘别名’%}
应用music中的 templates 文件夹下 first.html
second应用music中的 views.py
def first_views(request):
return render(request,"first.html")
带数据的请求语法:{% url ‘别名’ 值1 值2 值3 %}
练习:
first.html有三个超链接
第一个:连接到music.html
第二个:连接到second.html,并附带一个请求数据,在second.html中显示出来
第三个:连接到third.html,并附带两个请求数据,在third.html显示出来这两个数的和