Python框架—Django

本文详细介绍了Python Web框架Django,包括WSGI接口、Django的创建与文件解析、URL映射、静态文件处理、视图(Views)、常见错误处理、模板语言、ORM对象关系映射、数据库操作、admin配置、Cookie与Session、类视图(CBV)以及文件上传等内容,旨在帮助开发者全面理解并掌握Django。
摘要由CSDN通过智能技术生成

前言

框架(framework)的作用:省去重复代码的过程,使用框架可以快速开发特定的系统。
DRP:Don’t Repeat Yourself!

注意:理解所有注释内容

一、Python基本框架WSGI

1.1 WSGI(Web Server Gateway Interface)接口

from wsgiref.simple_server import make_server

# url指向的后端方法
def application(environ, start_response):
    # 通过environ封装成一个所有请求信息的对象
    # start_response可以很方便地设置响应头
    start_response('200 OK', [('Content-Type', 'text/html')])
    # 字典取请求信息:environ['path']==
    path = environ['PATH_INFO']
    if path == '/book1':
        return [b'<p>content1</p>']
    elif path == '/book2':
        return [b'<p style="color:red;">content2</p>']
    else:
        return [b"<p style='color:red;'>404</p>"]


# 封装socket对象及准备过程(scoket, bind, listen)
httpd = make_server('', 8000, application)	# url/port/function
# 开始监听http请求:
httpd.serve_forever()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2 升级功能

在上面的代码基础上分离完善框架各种功能,使框架功能分明,更方便使用和修改

from wsgiref.simple_server import make_server
import time


def func1(request):
	"""单独写各个url对应的方法"""
    return [b'<p style="color:red;">content1</p>']


def func2(request):
    return [b'<p style="color:red;">content2</p>']


def current_time(request):
    time_now = time.ctime(time.time())
    with open('current_time.html', 'r') as f:
        data = f.read()
    data = data.replace('!time!', str(time_now))		// 模板语言,动态修改html
    return [data.encode('utf8')]


def routers():
	"""将所有url与对应的方法以元组返回"""
    urlpatterns = (							// 所有url对应的函数
        ('/content1', func1),
        ('/content2', func2),
        ('/current_time', current_time),
    )
    return urlpatterns


def application(environ, start_response):
	"""
	environ:request, 从浏览器返回的信息,键值对,用字典方法取出
	start_response: 返回给浏览器的相应信息
	return:后端处理之后的html
	"""
    # 通过environ封装成一个所有请求信息的对象
    # 字典取请求信息:environ['path']==
    # start_response可以很方便地设置响应头
    start_response('200 OK', [('Content-Type', 'text/html')])
    path = environ['PATH_INFO']
    urls = routers()
    func = None
    for item in urls:			# 循环所有url路径,执行url需求的函数
        if item[0] == path:
            func = item[1]
            break
    if func:
        return func(environ)
    else:
        return [b'<p style="color:red;">404</p>']


# 封装socket对象及准备过程(scoket, bind, listen)
httpd = make_server('', 8000, application)
# 开始监听http请求(固定用法):
httpd.serve_forever()

MVC模式
MTV模式


二、Django

2.1 创建方法

  1. 创建方法一
django-admin startproject mysite	// 创建django项目
python manage.py startapp f1		// 在django项目中创建f1功能块
python manage.py runserver 127.0.0.1/8080		// 启动django项目,设置url/port,url不写时,默认为本地
python manage.py makemigrations		// 创建数据库
python manage.py migrates			// 更新数据库
  1. 创建方法二
    直接在pycharm中创建django项目
    在这里插入图片描述

2.2 文件介绍

2.2.1 django项目文件解析

在这里插入图片描述

  • funcName:网站各个功能文件夹,可能有多个,都有相同的文件,用于写不同的功能
    • migrations
      • init.py:
    • admin.py:
    • apps.py:
    • models.py:创建数据库
    • tests.py:
    • views.py:不同url指向的方法,在这里进行后端处理html,并将处理之后的html返回给前端
  • mysite
    • settings:配置文件(路径等)
    • urls:路径映射,就是网站各个路径指向的函数的元组
    • wsgi:python的基本网站框架,完成各种底层功能
  • manage.py:功能接口,用于创建项目、数据库等操作
  • templates:所有的html放在这个文件夹

2.2.2 URL

url参数
# FILE:/urls.py
from django.contrib import admin
from django.urls import path
from blog import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path(r'^info/', views.info, para, alias),
]
path(r'^info/', views.info, para, alias),

参数一:正则表达式,匹配相应的url,可能同一类的url都交给一个函数处理
参数二:url所映射到的处理函数

参数三:传给函数的参数(选用)

  1. 无名参数 no-name
    多个括号中的匹配内容按顺序传给函数,函数中参数名可自定义
# FILE:/urls.py
urlpatterns = [
    path('admin/', admin.site.urls),
    path(r'^info/([\d]{4})/([\d]{2})', views.info),
]
# 正则中,括号中的值会作为para传给映射函数view.info(),多个括号,函数中就需要接收多个参数
# para始终为字符串类型
# FILE:/views.py
# 在映射函数中直接使用
def info(req, para1, para2):
	return HttpResponse(para)
  1. 有名参数Named Group
    命名分组后,传入的参数必须按照组名传入,但是可以不管顺序,
# FILE:/urls.py
urlpatterns = [
    path('admin/', admin.site.urls),
    path(r'^info/(?P<year>[\d]{4})/(?P<month>[\d]{2})', views.info),
]
# FILE:/views.py
def info(req, month, year):
	return HttpResponse(year + month)
  1. 默认参数
# FILE:/urls.py
urlpatterns = [
    path('admin/', admin.site.urls),
    path(r'^info/', views.info, {
   'name': 'wolf'}),
]
# FILE:/views.py
def info(req, name):
	return HttpResponse(name)
# 这里的参数name必须和默认参数中的key相同

如果同时有默认参数和有名参数,且命名一样,默认参数会覆盖掉有名参数

参数四:url别名(选用)

# FILE:/urls.py
urlpatterns = [
    path('admin/', admin.site.urls),
    path(r'^info/', views.info, {
   'name': 'wolf'}, name='user_info'),
]
# url别名,即127.0.0.1:8000/info == 127.0.0.1:8000/user_info

用法:

<form action={% url "wolf" %} method='post'>	<!--可以用/user_info代替原/url,后端在修改url代码时,前端可以一直用/user_info这个url登录,-->
	
</form>
路由分发
# FILE:/mysite/urls.py
"""
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, include
from blog import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path(r'blog/', include('blog.urls')),	
    # 将blog APP下的所有链接,分发到blog文件夹下的urls文件,以后由/blog/链接进来的都到blog/urls.py处理,映射函数就写到blog/urls.py中
    # /mysite/urls.py只用于路由分发,映射函数写到app/urls.py中
]
# FILE:blog/urls.py
from django.urls import path
from blog import views
urlpatterns = [
    path(r
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 作为一个 AI 语言模型,我认为 Django 是一个非常流行和强大的 Python Web 框架,它提供了许多有用的功能和工具,使得开发 Web 应用程序变得更加容易和高效。它具有良好的可扩展性和灵活性,可以帮助开发人员快速构建高质量的 Web 应用程序。 ### 回答2: 对于 Python 框架 Django,我认为它是一款非常强大和受欢迎的框架。首先,Django 提供了丰富的功能和开发工具,使得快速构建高质量的 Web 应用变得非常容易。它提供了模板引擎、表单处理、数据库集成等众多功能,极大地简化了开发过程。 其次,Django 遵循了一套严谨而规范的设计原则,如 DRY (Don't Repeat Yourself)和 MVC (Model-View-Controller)模式,使得代码组织和维护更加简单。这种设计原则使得 Django 应用的可扩展性和可维护性都非常好,也有助于团队协作。 另外,Django 的社区非常活跃,拥有广泛的用户群体和贡献者。这意味着我们可以从社区中获取帮助、学习和分享经验。社区提供了大量的文档、教程、插件和第三方库,为开发者提供了丰富的资源。 此外,Django 还注重安全性。它内置了许多安全特性,如防止常见的安全漏洞、跨站点请求伪造(CSRF)保护等。这使得开发人员可以专注于业务逻辑,而不必过多担心安全问题。 总之,我认为 Django 是一个优秀的 Python 框架。它提供了强大的功能和友好的开发环境,使得开发者可以更快速、高效地构建 Web 应用。它的设计原则、社区支持和安全性都是其优势所在。无论是初学者还是有经验的开发者,都可以通过学习和使用 Django,提升自己的开发能力和项目质量。 ### 回答3: Django 是一个功能强大、灵活且高效的 Python Web 框架,它具有广泛的应用领域和强大的开发能力。下面是对 Django 框架的看法: 首先,Django 提供了丰富的功能和开发工具,能够快速创建高质量的 Web 应用程序。它提供了一套完整的开发流程和自动化工具,包括 URL 路由、模板引擎、表单处理、认证和授权等。这些功能的整合和内置能够加速开发过程,减少冗余代码的编写,提高开发效率。 其次,Django 是一个全功能的框架,具备了强大的数据库支持。它支持多种数据库后端,包括最常用的 MySQL、PostgreSQL 和 SQLite。Django 还提供了 ORM(对象关系映射)工具,通过简单的代码就能够实现数据库操作,从而降低了与数据库的交互复杂度,提高了代码的可读性和可维护性。 此外,Django 可扩展性强,可以轻松集成第三方应用和插件。它有一个强大的包管理系统,可以在项目中方便地引入各种功能模块,如认证、国际化、缓存等。这样可以减少开发工作量,提高系统的可用性和稳定性。同时,Django 社区活跃,拥有大量的开源项目和资源,使得开发者可以轻松获取帮助和分享经验。 总结来说,Django 是一个强大而又易用的 Python 框架,适用于各种规模的 Web 开发项目。它的功能丰富、开发效率高、可扩展性强,深受开发者和企业的青睐。如果你想要快速构建稳定的 Web 应用程序,Django 绝对是一个值得考虑的优秀选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值