初识Django
Django 是一个高级的 Python Web 框架,它鼓励快速开发和干净、实用的设计。在 Django 中,路由(URL 路由)和视图(Views)是两个核心概念,它们共同协作以响应客户端的请求并返回相应的响应。
路由(Routing)
在 Django 中,路由是指将 URL 路径映射到视图函数的过程。Django 通过 URLconf(URL configuration)来设置这些映射关系。URLconf 是一组映射规则,Django 使用这些规则来匹配请求的 URL 并调用相应的视图。
在 Django 项目中,urls.py
文件(通常位于每个应用的根目录下和项目的根目录下)定义了这些映射规则。每个映射规则都是一个 Python 元组,包含两个元素:一个正则表达式字符串和一个视图函数(或类)的引用。
示例:
假设我们有一个博客应用,并希望为博客文章设置一个路由。
# 在 blog/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('articles/<int:id>/', views.article_detail, name='article-detail'),
]
在这个例子中,path
函数用于定义一个路由。'<int:id>/'
是一个正则表达式,匹配像 /articles/123/
这样的 URL,其中 123
是一个整数。views.article_detail
是当 URL 匹配时应该调用的视图函数。name='article-detail'
是一个可选参数,为 URL 模式提供了一个名称,这个名称可以在 Django 模板和代码中用来反向解析 URL。
视图(Views)
在 Django 中,视图是一个可调用的对象,它接收一个 HttpRequest 对象作为输入,并返回一个 HttpResponse 对象作为输出。视图通常位于应用的 views.py
文件中。
视图负责执行以下任务:
- 接收 Web 请求并决定要执行的操作(例如,查询数据库、执行计算等)。
- 返回适当的 HTTP 响应给客户端。
示例:
# 在 blog/views.py
from django.http import HttpResponse
def article_detail(request, id):
# 假设这里有一个函数 get_article_by_id 来从数据库获取文章
# article = get_article_by_id(id)
# 这里我们只是简单地返回一个 HTTP 响应
return HttpResponse(f"Detail of article with id {id}")
在这个例子中,article_detail
函数是一个视图函数,它接收一个 HttpRequest 对象和一个额外的参数 id
(这个参数是由 URLconf 中的 <int:id>
部分捕获的)。函数返回一个 HttpResponse 对象,其中包含了文章的详细信息(在这个例子中,我们简单地返回了一个字符串)。
1、创建Django项目
Django项目的创建的路径不要有中文和空格;【计算机名称不要是中文】
1、在cmd中命令进行创建Django项目
打开存放项目的位置
创建Django项目:django-admin startproject 项目名称(注意:项目名称不要是中文)
启动django项目,进入到Django中的(manage.py所在的文件位置中)
python manage.py runserver 端口号
2、在pycharm创建Django项目
flie —— new project
选择Django进行创建
(pycharm有个小bug , 需要手动的在settings.py文件中导入os模块)
3、要实现功能的分隔 —— 创建应用(app)
创建应用的命令:python manage.py startapp 应用名称
Django项目文件作用
DjangoDemo
|—DjangoDemo 存放的是项目的配置文件
| |— asgi.py 异步操作的文件
| |— settings.py 项目的配置文件
| |— urls.py 项目的路由配置
| |— wsgi.py 封装 socket 服务端的东西
|— myapp
| |— migrations 数据迁移记录
| |— admin.py 后台管理文件
| |— apps.py 用来注册app
| |— models.py 用来操作数据库 ,模型
| |— tests.py 测试文件,可以单独运行
| |— views.py 视图文件,响应数据操作
|— templates 存放html文件,模板文件
|— manage.py Django项目的执行启动文件
Django项目中的settings.py文件中的配置信息
BASE_DIR = 项目的根目录
SECRET_KEY = 秘钥, 生成随机字符,用来对数据加密
DEBUG = Django项目启动的模式,默认True:启动之后项目执行过程中有异常会抛出错误信息;是在开发和测试时使用。
当设置为False , 表示在生产环境中启动,设置前确保ALLOWED_HOSTS的值不能为空
ALLOWED_HOSTS = 设置允许访问这个项目的ip
[] : 空列表 表示只允许当前本地主机访问:127.0.0.1
[‘*’]:表示允许所有主机访问
[‘192.168.163.21’,‘192.168.163.74’,……]:允许被指定的ip访问
INSTALLED_APPS = 注册项目中自己创建的app
MIDDLEWARE = 注册中间件使用
ROOT_URLCONF = 配置根目录级别的路由
TEMPLATES = 配置模板使用的配置引擎,以及访问模板文件的路径
WSGI_APPLICATION = 项目运行在WGSI兼容的web服务器中
DATABASES = 配置操作数据库信息
AUTH_PASSWORD_VALIDATORS = django的授权认证
LANGUAGE_CODE = 项目语言 ‘zh-Hans’:中文
TIME_ZONE = 项目使用的时区时间,‘UTC’:零时区 , ‘Asia/Shanghai’:东八区
STATIC_URL = 静态文件配置(css , js , image)
DEFAULT_AUTO_FIELD = 默认Auto认证
注册应用
在settings.py 文件中INSTALLED_APPS列表的最后添加配置信息
写法一:'myapp.apps.MyappConfig' [应用名称.apps.应用名称Config]
写法二:'myapp' [应用名称]
2、实现视图
视图的响应,响应功能就要写到应用的views.py文件中
def index(request):
'''
:param request: 接收浏览器发送的请求信息 ,视图函数必须要有的参数
:return: HttpResponse:响应字符串信息
'''
return HttpResponse('大家好 , 我是帅气的靓仔阿宸')
通过 urls.py 文件中对路由和视图函数之间的映射关系进行配置,使用 path 函数对路由配置对应关系
from myapp import views
urlpatterns = [
path('index/' , views.index),
]
响应 html 文件视图
def html_info(request):
# 响应 html文件 需要 render
# 返回一个含有 html 标签的字符串
return render(request , 'info.html')
def html_get_data(request):
# render(request , html文件 , 数据)
# render 传入的参数数据必须以字典类型传入
data = {'name':'尔康' , 'age': 18 , 'address':'重庆'}
return render(request, 'info.html' , data)
def html_get_data2(request):
name = '叶晓春'
age = 18
address = '广西'
'''
locals() 方法: 把当前视图所在的名称空间中所有的名称全部传递到html文件中
'''
return render(request, 'info.html' , locals())
path('info/' , views.html_info),
path('get_data/' , views.html_get_data),
path('get_data2/' , views.html_get_data2),
路由重定向
def baidu(request):
# rediect 重定向 , 实现url跳转
return redirect('https://www.bilibili.com')
def myurl(request):
# 重定向到自己项目中的url
return redirect('/get_data2/')
def myview(request):
# 重定向到当前视图文件内的视图函数
return redirect(index)
path('bd/' , views.baidu),
path('my/' , views.myurl),
path('my2/' , views.myview),
3、路由
路由: 用户通过使用 url 访问网络资源,服务器会根据 URl 请求到对应的路由配置中查询对应的视图关系。
url的配置是一个列表 , 查询是在列表中个从上往下查询。
正则匹配路由:用正则分组进行匹配 , 在项目中映射正则相关的 url 的时候 , 需要用 re_path 进行配置对应的视图关系
路由的正则分组匹配
无名分组
可以匹配 url 后面的一个数据 , 传递到这个路由对应的视图函数中作为参数使用,这个参数没有指定名称
有名分组
可以匹配 url 后面的一个数据 , 传递到这个路由对应的视图函数中作为参数使用,这个参数在路由匹配的时候有指定对应的名称 , 视图函数在接收的时候必须使用指定的名称
def url_data(request , data):
# 无名分组 , data 的数据是由 url 匹配的时候获取到的
return HttpResponse(f'这是无名分组,接收到 url 的参数为{data}')
def url_data2(request , number):
# number 一定要和 路由中定义的名称一致
return HttpResponse(f'这是有名分组,接收到 url 的参数为{number}')
# 无名分组
# (正则表达式)
re_path('url_text/(\w+)/' , views.url_data),
# 有名分组 (?P<名称>正则表达式)
re_path('url_data/(?P<number>\d+)/' , views.url_data2),