Django
Django项目文件:以下py文件负责组织和管理APP,APP则是实现不同功能的模块,一个Django项目可以由多个APP组成,每个APP都是一个相对独立且可重用的模块,可以代表特定的功能模块,例如用户认证、博客文章、新闻发布等。每个APP都包含自己的模型(models)、视图(views)、模板(templates)和静态文件(static files)等。
.manage.py 数据库自动生成,管理本项目的命令行工具
.init.py 告诉python该目录是一个python包,初始化工具
setting.py 项目配置文件,定义了本项目引用的对象
urls.py 项目路由映射,即客户端访问时由那个模块响应
wsgi.py python服务器网关接口,帮助你的Django应用程序与Web服务器通信。
asgi.py 增加了异步处理功能,与wsgi.PY功能类似
数据迁移:对Django模型(即数据库表的表示)的修改应用到数据库表结构的过程。这可以包括添加新的字段、删除旧的字段、更改现有字段的类型或添加新的关系等。model改变后,要重新迁移。实际上就是创建数据库表
python manage.py makemigrations python manage.py migrate
sqlite下载驱动:
创建并注册APP
在setting.py文件中注册APP
python manage.py startpp App
init.py | APP成为一个包 |
---|---|
admin.py | 管理站点模型的声明文件,默认空 |
apps.py | 应用信息定义文件,在其中生成appconfig,定义应用数据 |
models.py | 添加模型层数据类文件 |
views.py | 定义URL相应函数,定义各种视图函数 |
migrations包 | 自动生成,迁移文件 |
tests.py | 测试代码文件 |
Django
使用HTTP协议进行前后端交互。HTTP(Hypertext Transfer Protocol)是一种应用层协议,用于在网络中传输超文本(例如网页)。
在Django中,前端通过HTTP请求与后端进行交互。常见的HTTP请求方法包括GET、POST、PUT、DELETE等,它们分别用于获取资源、提交数据、更新资源和删除资源等操作。
Django提供了内置的路由系统,用于将HTTP请求映射到相应的视图函数(view function)。视图函数是处理特定URL的Python函数,它可以处理请求并生成响应。在视图函数中,你可以执行各种操作,例如查询数据库、处理表单数据、渲染模板等。
Django还提供了ORM(对象关系映射)工具,用于简化与数据库的交互。你可以使用ORM来定义数据模型(model),并在视图函数中执行数据库查询操作。
前端后端
前端开发也被称为客户端开发,主要负责在应用程序或网站的屏幕上看到的所有内容。这些内容通常包括网页的页面开发,如网页上的特效、布局、图片、视频、音频等。前端的工作内容包括将美工设计的效果图转换成浏览器可以运行的网页,并配合后端做网页的数据显示和交互等可视方面的工作。
后端也被称为服务器端开发,他们的职责主要是在系统“后面”所发生的事情。这包括在后端服务器和浏览器或应用程序之间存储网站、应用数据和中间媒介的服务器。后端的工作范畴还包括应用程序或网站屏幕上看不到的所有内容,通常这些内容是与前端工程师进行数据交互及网站数据的保存和读取。后端涉及到的逻辑代码通常比前端要多,他们需要考虑到底层业务逻辑的实现,以及平台的稳定性和性能等。
姜戈架构
Django 基于 MVT(模型-视图-模板)架构,它有以下三个部分:
- 模型model: 该模型将充当数据的接口。它负责维护数据。它是整个应用程序背后的逻辑数据结构,由数据库(通常是关系数据库,如MySql,Postgres)表示。
- 视图view: 视图是您在呈现网站时在浏览器中看到的用户界面。它由 HTML/CSS/Javascript 和 Jinja 文件表示。
- **模板template:**模板由所需 HTML 输出的静态部分以及描述如何插入动态内容的一些特殊语法组成。
Django MVT 模式的工作流程如下:
- 用户发送请求给 Django 服务器。
- Django 服务器根据请求的 URL 路由到相应的 View 函数。
- View 函数根据请求的类型和参数,从 Model 中获取数据,并将数据传递给 Template。
- Template 根据 View 传递的数据生成 HTML 页面,并返回给 Django 服务器。
- Django 服务器将 HTML 页面返回给用户。
路由**
根路由:项目文件urls.py里APP的路由,在项目级别上定义的路由,它包含了整个项目的路由信息
子路由:子路由是指在一个已经存在的路由路径下,再添加一个新的路由路径,以实现更细粒度的路由
**路由分发:**在 Django 中,路由分发是一个将 URL 请求分发到相应视图函数的过程。当一个 URL 请求来到 Django 项目时,它首先会被路由系统接收。
Django 的路由系统会查看 URL 请求,并将其分发到相应的视图函数。视图函数是 Django 中用于处理 HTTP 请求并返回 HTTP 响应的函数。
在 Django 中,路由分发通过项目主目录下的 urls.py 文件来实现。在这个文件中,你可以定义 URL 模式和其对应的视图函数。
例如,你可以定义一个名为 ‘archive’ 的 URL 模式,并将其与一个名为 ‘archive’ 的视图函数关联起来。这样,当一个 URL 请求匹配 ‘archive’ 模式时,它就会被路由到 ‘archive’ 视图函数进行处理。
在 urls.py 文件中,你可以使用正则表达式或者路径语法来定义 URL 模式。例如,你可以使用以下代码来定义一个名为 ‘archive’ 的 URL 模式:
from django.urls import path
from . import views
urlpatterns = [
path('archive/', views.archive),
]
在这个例子中,当一个 URL 请求匹配 ‘archive/’ 模式时,它就会被路由到名为 ‘archive’ 的视图函数进行处理。
在 Django 中,路由分发是反向解析的基础。反向解析是指通过 URL 模式的名称来查找相应的 URL。这使得你可以在 Django 模板中使用 {% url %} 标签来引用 URL 模式,而不需要硬编码 URL。
反向解析:在Django中,反向解析是一种通过别名或者名字来查找URL的模式。这可以让你在模板中或者其他地方引用URL,而不需要硬编码它们。
例如,假设你有一个名为archive
的视图,它对应的URL是/archive/
。你可以在模板中使用{% url 'archive' %}
来引用这个URL。这就是反向解析。
在Django中定义URL模式时,你可以给它们起一个名字。例如:
from django.urls import path
from . import views
urlpatterns = [
path('archive/', views.archive, name='archive'),
]
在这个例子中,'archive'
就是URL模式的名字。你可以在模板中使用这个名字来引用URL。
反向解析在Django模板中使用{% url %}
标签来实现。例如:
html复制代码
<a href="{% url 'archive' %}">Archive</a>
这将会生成一个指向/archive/
的链接。
使用反向解析的好处是,如果你更改了URL的模式或者结构,你只需要更改一个地方,而不是所有引用这个URL的地方。这可以大大简化维护工作。
命名空间
在 Django 中,命名空间通常指的是一种将 URL 模式与视图函数相关联的方式。这使得可以在不同的地方定义 URL 模式,而不必担心它们会与其他地方的已有定义发生冲突。
例如,在一个 Django 项目中,可以有一个名为 ‘archive’ 的应用,它有一个名为 ‘archive’ 的 URL 模式和一个相应的视图函数。如果这个项目还有其他应用,它们也可以定义名为 ‘archive’ 的 URL 模式和视图函数,而不会与第一个定义发生冲突。
在 Django 中,命名空间可以通过在 urls.py 文件中为每个应用定义一个单独的模块来实现。每个模块都可以定义自己的 URL 模式和视图函数,而不会影响其他模块的定义。
例如,以下是一个名为 ‘archive’ 的应用的 urls.py 文件:
from django.urls import path
from . import views
app_name = 'archive'
urlpatterns = [
path('', views.index),
path('archive/', views.archive),
]
在这个文件中,定义了两个 URL 模式:一个默认的 ‘’,另一个是 ‘archive/’。它们都与相应的视图函数相关联。
在 Django 的模板中,可以使用 {% url %} 标签来引用 URL 模式,其中可以使用命名空间来指定应用的名称。例如:
<a href="{% url 'archive:archive' %}">Archive</a>
在这个例子中,‘archive:archive’ 使用了命名空间 ‘archive’ 和 URL 模式 ‘archive’。这样就可以将这个链接与正确的 URL 模式和视图函数相关联起来。
**用户传参:**即超链接
在 Django 中,用户传参通常涉及到在视图函数中接收和处理用户输入的数据。Django 提供了多种方式来处理用户传参,包括使用 HTTP 请求参数、表单和序列化器等。
- HTTP 请求参数:Django 的视图函数可以接收 HTTP 请求对象作为参数,通过该对象可以访问请求中的参数。例如,可以在视图函数中接收 GET 或 POST 请求的参数:
from django.http import HttpResponse
def my_view(request):
name = request.GET.get('name') # 获取 GET 请求中的参数
data = request.POST.get('data') # 获取 POST 请求中的参数
# 处理参数并返回响应
return HttpResponse('Hello, {}! Data: {}'.format(name, data))
- 表单:Django 提供了强大的表单处理机制,可以方便地处理用户通过表单提交的数据。你可以定义一个表单类,其中包含多个字段,并在视图函数中使用
request.POST
来接收表单数据:
from django import forms
from django.http import HttpResponse
class MyForm(forms.Form):
name = forms.CharField(max_length=100)
data = forms.CharField(max_length=100)
def my_view(request):
if request.method == 'POST':
form = MyForm(request.POST)
if form.is_valid():
name = form.cleaned_data['name']
data = form.cleaned_data['data']
# 处理参数并返回响应
return HttpResponse('Hello, {}! Data: {}'.format(name, data))
else:
form = MyForm()
return render(request, 'my_template.html', {'form': form})
在模板中,你可以使用 {{ form }}
来渲染表单,让用户填写数据。
3. 序列化器:当处理复杂的数据结构(如 JSON)时,可以使用 Django 的序列化器来解析和验证数据。序列化器可用于处理请求中的数据,并将其转换为 Python 对象或将数据转换为响应中的格式。例如:
from django.http import JsonResponse
from rest_framework import serializers
class MySerializer(serializers.Serializer):
name = serializers.CharField(max_length=100)
data = serializers.CharField(max_length=100)
def my_view(request):
serializer = MySerializer(data=request.data)
if serializer.is_valid():
name = serializer.validated_data['name']
data = serializer.validated_data['data']
# 处理参数并返回响应
return JsonResponse({'message': 'Hello, {}! Data: {}'.format(name, data)})
else:
return JsonResponse({'error': 'Invalid data'})
这里使用了 Django REST Framework 的序列化器来处理 JSON 数据。当请求中的数据不符合序列化器的规范时,将返回一个包含错误信息的 JSON 响应。
re_path是Django中的一个强大工具,它允许在写URL的时候使用正则表达式,从而使URL匹配更灵活。
在定义URL模式时,可以使用原生字符串(即:已r开头的字符串),这样可以让正则表达式更易读。在正则表达式中定义变量,需要使用小括号括起来,例如:r"(?P\d{4})"。 另外,还可以使用圆括号来捕获参数,这样就可以给每个捕获的参数起一个名字,然后在正则表达式之外使用这个名字来引用这些参数。
需要注意的是,除非特殊需求(如:需要使用正则表达式匹配url),否则直接使用path就够用了,这样可以让代码更简洁。
重定向:
在计算机编程中,重定向是一个常见的概念,主要用于改变程序中数据流动的方向,或者改变用户输入输出的位置。
在web开发中,重定向用于将用户从一个URL导向到另一个URL。这通常在以下几种情况下使用:
- 永久重定向:这是最常见的类型,用于将用户永久地从旧URL重定向到新URL。这通常是因为网站的URL结构已经改变,或者页面已经被完全删除并被新的页面替代。
- 临时重定向:这种重定向通常用于临时解决方案。例如,你可能有一个正在进行维护的页面,你希望在维护期间将所有访问该页面的用户重定向到一个通知页面。
- 外部重定向:这种重定向用于将用户从一个网站重定向到另一个网站。例如,当用户点击一个特定的链接时,他们将被重定向到另一个网站。
在Django框架中,你可以使用redirect()
函数来实现重定向。例如,你可以如下面这样重定向到一个特定的视图:
from django.shortcuts import redirect
def my_view(request):
...
return redirect('/other-view/')
在上面的代码中,当my_view
被调用时,它将返回一个重定向响应,将用户导向'/other-view/'
这个URL。
重定向到另一个网站。
在Django框架中,你可以使用redirect()
函数来实现重定向。例如,你可以如下面这样重定向到一个特定的视图:
from django.shortcuts import redirect
def my_view(request):
...
return redirect('/other-view/')
在上面的代码中,当my_view
被调用时,它将返回一个重定向响应,将用户导向'/other-view/'
这个URL。
请注意,redirect()
函数的具体用法可能会根据Django版本和上下文略有不同。如果你在使用中遇到问题,你应该查阅最新的Django文档以获取最准确的信息。