Python Web开发框架Django全套操作,一篇就够!!

这篇博客详细介绍了Django框架的各个方面,从安装、HelloWorld项目创建,到URL路由、数据模型、用户认证组件和API接口文档的配置,涵盖了Django开发的全过程。此外,还讨论了Django中的模板、视图、中间件、cookie与session的使用,以及解决实际开发中遇到的问题。
摘要由CSDN通过智能技术生成

目录

Django 简介

安装

HelloWorld 

创建一个HelloWorld 项目

运行项目

URL路由

路径转换器

补充

请求方式

表单

视图

模板

模板基本语法:

模板流程控制:

模板遍历:

模板遍历字典

模板注释

模板之间的引用

配置静态文件

模板继承

数据模型

模型创建

数据库操作-crud

插入

查询

修改

删除

聚合查询

分组查询(annotate)

Q() 查询

常见的field

options:

type:

组件

用户认证组件

创建用户

验证用户

退出登录

Django 中间件

自定义中间件实现拦截器

cookie 与 session

cookie 

session

API接口文档

 ​

问题解决:

'AutoSchema' object has no attribute 'get_link'

'staticfiles' is not a registered tag library.

Django Nginx+uwsgi 安装配置


Django 简介

Django 是一个开放源代码的 Web 应用框架,由 Python 写成。采用了 MVT 的软件设计模式,即模型(Model),视图(View)和模板(Template)。

基于 MVC 模型,即 Model(模型)+ View(视图)+ Controller(控制器)设计模式,MVC 模式使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。

关于MVC 与 MTV模型

Django 版本对应的 Python 版本:

Django 版本 Python 版本
1.8 2.7, 3.2 , 3.3, 3.4, 3.5
1.9, 1.10 2.7, 3.4, 3.5
1.11 2.7, 3.4, 3.5, 3.6
2.0 3.4, 3.5, 3.6, 3.7
2.1, 2.2 3.5, 3.6, 3.7

安装

--window

首先需要安装python环境

安装 Django:

我是直接pip install django

输入以下命令进行检查::

>>> import django
>>> django.get_version()

  

HelloWorld 

创建一个HelloWorld 项目

使用 django-admin 来创建项目,Django 3.1之前用django-admin.py

django-admin startproject HelloWorld

  

目录说明:

  • HelloWorld: 项目的容器。
  • manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
  • HelloWorld/__init__.py: 一个空文件,告诉 Python 该目录是一个 Python 包。
  • HelloWorld/asgi.py: 一个 ASGI 兼容的 Web 服务器的入口,以便运行你的项目。
  • HelloWorld/settings.py: 该 Django 项目的设置/配置。
  • HelloWorld/urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。
  • HelloWorld/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。

运行项目

进入 HelloWorld 目录输入命令,0.0.0.0 让其它电脑可连接到开发服务器,8000 为端口号。默认为 8000

python manage.py runserver 0.0.0.0:8000

浏览器输入http://localhost:8000/

 

创建views文件夾,创建HelloView.py文件

from django.http import HttpResponse

def hello(request):
    return HttpResponse("Hello world ! ")

  

打开url.py文件,复制一行urlpatterns中的path改成如下内容

path('hello/', HelloView.hello),

  

重启项目,访问http://localhost:8000/hello/路径

 

成功!

URL路由

传递参数:

使用 <int:name> 来捕获整型参数

示例:path('articles/<int:year>/<int:month>/', views.month_archive),

路径转换器

  • str - 匹配除了 '/' 之外的非空字符串。如果表达式内不包含转换器,则会默认匹配字符串。
  • int - 匹配 0 或任何正整数。返回一个 int 。
  • slug - 匹配任意由 ASCII 字母或数字以及连字符和下划线组成的短标签。比如,building-your-1st-django-site 。
  • uuid - 匹配一个格式化的 UUID 。为了防止多个 URL 映射到同一个页面,必须包含破折号并且字符都为小写。比如,075194d3-6885-417e-a8a8-6c931e272f00。返回一个 UUID 实例。
  • path - 匹配非空字段,包括路径分隔符 '/' 。它允许你匹配完整的 URL 路径而不是像 str 那样匹配 URL 的一部分。
# URLconf
from django.urls import path

from . import views

urlpatterns = [
    path('blog/', views.page),
    path('blog/page<int:num>/', views.page),
]

# View (in blog/views.py)
def page(request, num=1):
    # Output the appropriate page of blog entries, according to num.
    ...

自定义的路径转换器:https://docs.djangoproject.com/zh-hans/3.2/topics/http/urls/

被包含的URLconf 会收到来自父URLconf 捕获的任何参数

# In settings/urls/main.py
from django.urls import include, path

urlpatterns = [
    path('<username>/blog/', include('foo.urls.blog')),
]

# In foo/urls/blog.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.blog.index),
    path('archive/', views.blog.archive),
]

补充

正则限制符号:^匹配要检索的文本的开头,$匹配文本的结束

Django1.1.x  url() 方法需要手动添加正则首位限制符号

from django.conf.urls import url # 用 url 需要引入

urlpatterns = [
    url(r'^index/$', views.index), 
]

Django 2.2.x 之后的版本

  • path:用于普通路径,不需要添加限制符号,底层已经添加
  • re_path:用于正则路径,需要自己手动添加正则首位限制符号。与1.1.x 版本中的 url 用法相同
from django.urls import re_path # 用re_path 需要引入
urlpatterns = [
    path('admin/', admin.site.urls),
    re_path("^index/([0-9]{4})/$", views.index),
]

请求方式

表单

from django.http import HttpResponse, QueryDict
from django.shortcuts import render
from django.views.decorators import csrf


# 接收表单请求数据 - get
def search(request):
    QueryDict("")
    request.encoding = 'utf-8'
    if 'q' in request.GET and request.GET['q']:
        message = '你搜索的内容为: ' + request.GET['q']
    return HttpResponse(message)


# 接收POST请求数据
def search_post(request):
    ctx ={}
    if request.POST:
        ctx['rlt'] = request.POST['q']
    return render(request, "post.html", ctx)

页面

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>runoob.com</title>
</head>
<body>
    <form action="/search/" method="get">
        <input type="text" name="q">
        <input type="submit" value="搜索">
    </form>

    <form action="/search-post/" method="post">
        {% csrf_token %}
        <input type="text" name="q">
        <input type="submit" value="搜索">
    </form>
</body>
</html>

视图

# GET
def runoob(request):
    name = request.GET.get("name")
    return HttpResponse('姓名:{}'.format(name))
# POST
def runoob(request):
    name = request.POST.get("name")
    return HttpResponse('姓名:{}'.format(name))
# body
def runoob(request):
    name = request.body
    print(name)
    return HttpResponse("菜鸟教程")

# 解析请求的json格式入参
data = JSONParser().parse(request)

模板

在 HelloWorld 目录底下创建 templates 目录并建立 runoob.html文件

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑶山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值