python web全栈开发_Python Web 全栈开发(二)

设计模式 和 框架模式

设计模式:是一套反复使用,多人知晓并经过分类的代码设计经验的总结,是为了解决一些通用问题。

目的:重用代码并保证可靠性

官方认证的设计模式有23种,单例模式,抽象工厂模式… …

框架模式:代码的重用,框架模式是解决如何设置程序框架的代码,在框架中包含很多种设计模式:如 MVC MTV MVVM ORM… …

MVC:

Model:模型层,在程序中主要处理数据,负责在数据库进行数据的CRUD

View:视图层,应用程序中处理显示的内容(html)

Controller:控制层,处理用户交互的部分,负责从模型中取出数据,在进行业务的处理,最后将数据给视图层,并将视图响应给客户端。

f1c26fa69ec46e8cf57585d404f5feb2.png

MTV:

Model:模型层,在程序中主要处理数据,负责在数据库进行数据的CRUD

Template:模板层,用于处理用户显示的部分内容,如html

View:视图层,处理用户交互,从模型中获取数据,再将数据给模板,再显示给用户

5da0f4fd7d58ac3dba0249f7c3d0c7c0.png

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.html

应用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显示出来这两个数的和

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值