一、Django5的介绍
配套视频:点击此处
1. Django框架的介绍
Django是一个开源的Web应用框架,使用python语言编写,设计用于快速开发安全、可扩展的Web应用程序
2.Django框架特点
MTV模式:模型(Model)、模板(Template)、视图(View)
自动化管理后台:提供自动生成管理后台的功能
强大的ORM:对象关系映射,简化数据库操作
安全性:内置防止常见攻击,如:SQL注入、跨站点请求伪造(CSRF)的机制
3.Django的安装
在python终端使用以下命令
安装虚拟环境
python -m venv testdjango
激活虚拟环境
testdjangoScriptsactivate
4.安装Django
在python终端使用以下命令
pip install django
二、Django入门
1.URL组成部分
URL 是 Uniform Resource Locator 的简写,统一资源定位符
一个URL由一下几个部分组成
scheme://host:port/path/?query-string=xxx#anchor
- scheme:代表的是访问的协议,一般为:HTTP、HTTPS 以及 FTP 等
- host:主机名、域名,比如
www.baidu.com - port:端口号,HTTP协议是80端口,HTTPS是443端口
- path:查找路径,比如:
www.jianshu.com/trending/now后面的trending/now就是 path - query-string:查询字符串,比如:
www.baidu.com/s?wd=python后面的wd=python就是查询字符串 - anchor:锚点,后台一般不用管,前端用来做页面定位的
注:URL 中的所有字符都是 ASCII 字符集,如果出现非 ASCII 字符,比如中文,浏览器会进编码再进行传输
2.创建Django项目
方法一:使用命令行
-
创建项目:打开终端,使用命令:
语法:
django-admin startproject 项目名 -
创建应用(app):一个项目类似与是一个架子,但是真正起作用的还是app,在终端进入到项目所在路径,然后执行
python manage.py startapp app名称创建一个app
方法二:使用Pycharm
用 Pycharm 新建一个 Django 项目
文件 ==> 新建项目 ==> Django ==> 选择位置 ==> 选择解释器 ==> 创建
使用Pycharm创建完项目后,还是需要重新进入命令行单独创建app的
3.运行Django项目
通过命令行的方式
python manage.py runserver
这样可以在本地访问你的网站,端口号默认是 8000 ,这样就可以在浏览器中通过http://127.0.0.1:8000/或者http://localhost:8000/来访问你的网站了,另外,这样运行只能在本地访问,如果想要在其他电脑上也能访问本网站,那么需要指定ip地址为0.0.0.0,示例:
python manage.py runserver 0.0.0.0:8000
通过Pycharm运行
直接点运行即可
4.项目结构介绍
manage.py:以后和项目交互基本上都是基于这个文件,一般都是在终端输入python manage.py 子命令,可以输入python manage.py help看下能做什么事情,除非你知道你自己在做什么,一般情况下不应该编辑这个文件settings.py:本项目的设置项,以后所有和项目相关的配置都放在这里urls.py:这个文件用来配置URL路由的,比如http://127.0.0.1/news/是访问新闻列表页,这些东西就需要在这个文件中完成wsgi.py:项目与WSGI协议兼容的web服务器入口,部署的时候需要用到,一般不需要修改
5.project和app的关系
app 是 Django 项目的组成部分,一个 app 代表项目中的一个模块,所有URL请求的响应都是由 app 来处理,比如豆瓣,里面有图书、电影、音乐、同城等许许多多的模块,如果站在 Django 的角度来看的话,图书、电影这些模块就是 app ,图书、电影这些 app 共同组成豆瓣这个项目,因此这里要有一个概念,Django 项目由许多 app 组成,一个 app 可以被用到其他项目,Django 也能拥有不同的 app
创建 app 命令语法
python manage.py startapp app名称
6.URL 与视图函数的映射
# urls.py
# https://www.baidu.com/s?wd=python
# url 与视图映射
# /s(url) --> 视图函数,进行映射
# 需求:http://localhost:8000/ --> 返回“欢迎进入测试页!”
from django.shortcuts import HttpResponse
#导入
# 定义视图函数
def index(request):
# 必须返回HttpResponse对象
return HttpResponse("欢迎进入测试页!")
# 如果需要进行映射,就得在urlpatterns列表中添加定义
urlpatterns = [
path('admin/', admin.site.urls),
path('', index),
]
拓展:
在settings.py中DEBUG = True修改项目任意代码后,按ctrl+s后自动更新,不需要重新启动
7.URL的两种传参方式
方法一:通过查询字符串(query string)
book/views.py
from django.shortcuts import render,HttpResponse
# 在URL中携带参数
# 1. 查询字符串:http://127.0.0.1:8000/book?id=2&name=xx
def book_detail_query_string(request):
# request.GET = {'id':3}
book_id = request.GET.get('id')
book_name = request.GET.get('name')
return HttpResponse(f'你查询的图书id是:{book_id},名字是:{book_name}')
urls.py
from book import views
urlpatterns = [
path('admin/', admin.site.urls),
# 添加
path('book',views.book_detail_query_string)
]
方法二:在path中携带
urls.py
from book import views
urlpatterns = [
path('admin/', admin.site.urls),
# http://127.0.0.1:8000/book/2
path('book/<book_id>',views.book_detail_path)
]
book/views.py
from django.shortcuts import render,HttpResponse
# 在path中携带
def book_detail_path(request,book_id):
return HttpResponse(f'你查询的图书id是:{book_id}')
在book_id 前指定参数类型有两点好处:
- 以后在浏览器中,如果
book_id输入的是一个非整型,那么就会出现404错误 - 在视图函数中,得到的
book_id就是个整型,否则默认是 str 类型
除了int类型 Django 的 path 部分还支持str、uuid、path类型
8.path 函数
path 函数的定义为:path(route,view,name=None,kwargs=None),以下对这个几个参数进行说明:
route参数:URL的匹配规则,这个参数中可以指定URL中需要传递的参数,比如在访问文章详情页的时候,可以传递一个 id ,传输参数是通过<>尖括号来指定的,并且在传递参数的时候,可以指定这个参数的数据类型,比如文章的 id 都是 int 类型,那么久可以这样写<int:id>,以后匹配的时候,就只会匹配到 id 为 int 类型的 URL ,而不会匹配其他的URL,并且在视图函数中获取这个参数的时候,就已经被转换成一个 int 类型了,其中还有几种常用的类型:str:非空的字符串类型。默认的转换器,但不能包含斜杠int:匹配任意的0或者正整数的整型。到视图函数中就是一个 int 类型slug:由英文中的横杠-、或者下划线_;连接英文字符或者数字而成的字符串uuid:匹配uuid字符串path:匹配非空的英文字符串,可以包含斜杠/
view参数:可以为一个视图函数,或者是类视图.as_view()或者是django.urls.include()函数的返回值name参数,这个参数是给这个URL取名的,这在项目比较大,URL比较多的时候用处很大
9.URL中包含另外一个 urls 模块
在项目中,不能只有一个app,如果把所有的app的views中的视图都放在urls.py中进行映射,肯定会让代码显得非常乱,因此 Django 可以在 app 内部包含自己的URL匹配规则,而在项目的url.py中再统一包含这个app 的 urls,使用这个技术需要借助 include 函数
示例:
在 move 文件夹下创建一个urls.py文件
from django.urls import path
from . import views
# 指定应用名称(应用命名空间)
app_name = 'move'
urlpatterns = [
path('list', views.move_list, name='move_list'),
path('detail/<int:move_id>',views.move_detail, name='move_detail'),
]
在项目的url.py中的代码如下:
from django.contrib import admin
# 导入include
from django.urls import path, include
from book import views
urlpatterns = [
path('admin/', admin.site.urls),
# http://127.0.0.1:8000/book/2
path('book/<int:book_id>',views.book_detail_path),
# 加入move文件中的url
path('move/', include('move.urls')),
]
10.URL反转
- 之前我们都是通过URL访问视图函数,有时候我们知道这个视图函数,但是想反转回他的URL,这时候就可以通过
reverse来实现 - 如果有命名空间或者有实例命名空间,那么应该在反转的时候加上命名空间
- 如果这个URL中需要传递参数,那么可以通过
kwargs来传递参数 - 因为 Django 中的
reverse反转URL的时候不区分 GET 请求和 POST 请求,因此不能在反转的时候添加查询字符串的参数,如果想要添加查询字符串的参数,只能手动添加
示例:
from django.contrib import admin
# 导入reverse函数
from django.urls import path, include,reverse
from django.shortcuts import HttpResponse
from book import views
def index(request):
# 无参数反转
print(reverse('index'))
# 带参数反转
print(reverse('book_int_id', kwargs={'book_id':1}))
# 如果是这种:/book?id=1 只能进行手动传参
# print(reverse('index') + '?id=1')
# 已有命名空间的URL反转
print(reverse('move:move_detail', kwargs={'move_id':1}))
return HttpResponse("欢迎加入牛马大军")
urlpatterns = [
path('admin/', admin.site.urls),
path('', index, name='index'),
path('book/<int:book_id>', views.book_id, name='book_int_id'),
path('move/', include('move.urls')),
]
输出结果:
/
/book/1
/book?id=1
/move/detail/1





