Django学习笔记
本文最后更新于287 天前,其中的信息可能已经过时~

一、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项目

方法一:使用命令行

  1. 创建项目:打开终端,使用命令:

    语法:

    django-admin startproject 项目名
    
  2. 创建应用(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.项目结构介绍

  1. manage.py:以后和项目交互基本上都是基于这个文件,一般都是在终端输入python manage.py 子命令,可以输入python manage.py help看下能做什么事情,除非你知道你自己在做什么,一般情况下不应该编辑这个文件
  2. settings.py:本项目的设置项,以后所有和项目相关的配置都放在这里
  3. urls.py:这个文件用来配置URL路由的,比如http://127.0.0.1/news/是访问新闻列表页,这些东西就需要在这个文件中完成
  4. 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 前指定参数类型有两点好处:

  1. 以后在浏览器中,如果book_id输入的是一个非整型,那么就会出现404错误
  2. 在视图函数中,得到的book_id就是个整型,否则默认是 str 类型

除了int类型 Django 的 path 部分还支持str、uuid、path类型

8.path 函数

path 函数的定义为:path(route,view,name=None,kwargs=None),以下对这个几个参数进行说明:

  1. route参数:URL的匹配规则,这个参数中可以指定URL中需要传递的参数,比如在访问文章详情页的时候,可以传递一个 id ,传输参数是通过<>尖括号来指定的,并且在传递参数的时候,可以指定这个参数的数据类型,比如文章的 id 都是 int 类型,那么久可以这样写<int:id>,以后匹配的时候,就只会匹配到 id 为 int 类型的 URL ,而不会匹配其他的URL,并且在视图函数中获取这个参数的时候,就已经被转换成一个 int 类型了,其中还有几种常用的类型:
    • str:非空的字符串类型。默认的转换器,但不能包含斜杠
    • int:匹配任意的0或者正整数的整型。到视图函数中就是一个 int 类型
    • slug:由英文中的横杠-、或者下划线_;连接英文字符或者数字而成的字符串
    • uuid:匹配uuid字符串
    • path:匹配非空的英文字符串,可以包含斜杠/
  2. view参数:可以为一个视图函数,或者是类视图.as_view()或者是django.urls.include()函数的返回值
  3. 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

三、模板

🍬 投喂须知:
金额随意,心意无价~
每一份赞赏都会变成我优化网站的灵感,
往后余生,愿我们继续在文字里相遇相知❤️
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇