MVC设计模式

MVC框架的核心思想是:解耦

降低各功能模块之间的耦合性,方便变更,更容易重构代码,最大程度上实现代码的重用

M表示model,主要用于对数据库层的封装

V表示view,用于向用户展示结果

C表示controller,是核心,用于处理请求、获取数据、返回结果

MVT

M表示model,负责与数据库交互

V表示view,是核心,负责接收请求、获取数据、返回结果

T表示template,负责呈现内容到浏览器

搭建Django项目

在pycharm里搭建Django项目。

点击create new project,然后选择Django,再填写项目名称。最后点击创建就可以了。

如果本地没有安装与所选python版本对应Django版本,pycharm会自动下载相应的版本。

等待一段时间,创建成功后的结构如下:

选择监听所有IP(可选)

修改项目同名目录下的配置文件 web/web/settings.py,修改为ALLOWED_HOSTS = [‘*’]

在项目中创建app应用

在pycharm里的终端输入:python manage.py startapp home,生成名字为home的应用(文件夹).

并在此文件夹的__init__.py中输入

1
2
import pymysql
pymysql.install_as_MySQLdb()

编辑视图

编写home/views.py文件代码:

1
2
3
4
5
6
7
8
from django.shortcuts import render
from django.http import HttpResponse #需要导入HttpResponse模块

## Create your views here.
# 创建一个试图函数 输出hello world
def index(request): #request参数必须有,名字类似self的默认规则,可以修改,它封装了用户请求的所有内容
# 在试图函数中进行响应
return HttpResponse('Hello World!!!...') #不能直接字符串,必须是由这个类封装,此为Django规则

指定路由规则来执行视图函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 1, 配置应用路由
# 找到项目同名的文件夹 web/web/urls.py
from django.urls import path,include
from django.contrib import admin

urlpatterns = [
#匹配路径从上到下,上一个没有再看下一个。
path('admin/', admin.site.urls),
path('', include('home.urls')),
]

# 2配置字路由,在home应用中 创建一个urls.py文件,指定规则和视图函数
from django.urls import path
from . import views

urlpatterns = [
path('', views.index),
]

使用模板文件

在templates文件夹下创建a.html文件,然后写入html代码。

1
2
3
4
5
6
<body>
<center>
<h3 style="color:#369;">静态模板文件</h3>
<h3>{{ aaa }}</h3>
</center>
</body>

在home/views.py文件中添加,使用render函数加载指定模板:

1
2
3
4
5
6
7
8
9
10
11
def demo(request):
# 响应信息
# return HttpResponse('AABBCC...')

# 响应一个模板文件 参数1 请求对象 参数2 模板文件
# return render(request,'a.html')

# 定义数据
love = 'ilikeyou'
# 响应一个模板文件 参数1 请求对象 参数2 模板文件 参数3 分配数据
return render(request,'a.html',{'aaa':love})

在home/urls.py文件中加入一条路径:

1
2
3
4
5
urlpatterns = [
#匹配路径从上到下,上一个没有再看下一个。
path('', views.index),
path('abc/', views.demo),
]

在pycharm里不用配置模板目录,它已经配置完成。

路由的定义

url ==> 统一资源定位符

指得就是请求的 (url)地址

http://python.itxdl.cn/html/tutorial/

http://python.itxdl.cn/html/teachers/

可以在项目中指定请求的url地址,来交给对应的视图函数进行解析

路由的特点:

路由就是在urls中进行规则的配置

按照从上往下的顺序来执行

如果匹配到,则加载指定的视图函数来执行

如果匹配不到,则抛出 404

1
2
3
http://127.0.0.1:8000/web/articles/2003/
web/ 根路由
articles/2003/ 子路由

在home/views.py文件中添加.

1
2
def special_case_2003(request):
return HttpResponse('special_case_2003')

在home/urls.py文件中urlpatterns加入一条路径:

1
2
# 路由参数
# path('articles/2003/', views.special_case_2003),

路由参数

路由参数就是把 url路径 中的一部分作为参数来使用

在定义路由规则时,使用小括号() 括起来的内容,将作为参数传递给视图函数

在home/views.py文件中添加.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
##对应的视图函数
def year_archive(request,year):
print(year)
return HttpResponse('year_archive')

def month_archive(request,a,b):
print(a)
print(b)
return HttpResponse('month_archive')

def rticle_detail(request,a,b,c):
print(a)
print(b)
print(c)
return HttpResponse('rticle_detail')

在home/urls.py文件中urlpatterns加入一条路径:

1
2
3
4
5
6
7
8
9
from django.urls import re_path
# 路由规则
#匹配路径从上到下,上一个没有再看下一个。
re_path(r'^articles/([0-9]{4})/$', views.year_archive),
或者
#re_path('articles/([0-9]{4})/', views.year_archive),

re_path(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
re_path(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),

命名组 命名参数

和路由参数一样是用来获取url中路径作为参数来使用

不同的是 命名组会把当前参数作为 关键字参数传递给视图函数,因此对应的视图函数必须有关键字参数

在home/views.py文件中添加.

1
2
3
4
#在对应的视图函数中则必须有对应的关键字参数
def abc_2003(request,aa):
print(aa)
return HttpResponse('abc_2003')

在home/urls.py文件中urlpatterns加入一条路径:

1
2
# 命名组 使用?P<变量名> 方式来定义
re_path(r'^abc/(?P<aa>[0-9]+)/$', views.abc_2003),

面试题:

你会正则表达式吗?

答:我对正则表达式的理解是 :

是什么? 能干什么? 怎么用? 优缺点?

以上就是我对正则表达式的理解

1
2
3
4
5
正则表达式就是使用 字符串,转义字符,元字符来定义一个规则,去匹配或搜索一个指定的内容
获取符合要求的内容.
比如我们在js中使用正则来检测用户输入的信息是否正确,
或我们在爬虫中使用正则来爬取我们想要的数据和内容
我们在爬虫中除了使用正则外还可以使用xpath等方法来获取数据内容,更方便