Django开发实例总结(入门级、4.2.6、详细)

目录

概述

Django的核心组件包括

Django的项目结构

创建工程(4.2.6)

实例一:Hello world

实例二:访问一个自定义主页

实例三:通过登录跳转到主页

实例四:主页添加静态文件,包含js、css、图片

实例五:访问api多级路径,传入json参数计算结果


概述

Django是一个用于构建Web应用程序的高级Python Web框架。它遵循了MVC(Model-View-Controller)的软件设计模式,并采用了MTV(Model-Template-View)的变种。

模型(Model)、模板(Template)、视图(Views)。

Django的核心组件包括

  1. Models(模型):模型定义了应用程序中使用的数据结构和数据库表的结构。它们通过Django的ORM(对象关系映射)与数据库进行交互。通过定义模型类,您可以创建数据库表以及与之相关的字段和方法。Django的ORM(对象关系映射)提供了一个简单的方式来操作数据库,无需编写原始的SQL查询语句。

  2. Views(视图):视图负责处理HTTP请求,并返回HTTP响应。它们从模型中获取数据,并将其传递给模板进行渲染。在Django中,视图函数或基于类的视图处理来自URL的请求,并从模型层获取所需的数据,然后将其传递给模板层进行渲染。视图可以返回HTML页面、JSON数据或其他响应类型。

  3. Templates(模板):模板层负责生成最终的用户界面。模板是用于呈现数据的HTML文件。它们允许您将动态数据嵌入到静态HTML中,并使用Django的模板语言来处理逻辑和控制流。Django使用模板引擎将动态数据与静态HTML代码分离。您可以在模板中使用变量、循环、条件语句等,以便根据需要动态生成页面

  4. URLconf(URL配置):URLconf负责将URL映射到视图函数。它定义了URL模式和对应的视图函数。URL调度器(或路由)将URL映射到相应的视图函数或类。在Django中,您可以通过在URL配置文件中定义URL模式来设置路由规则。URL调度器根据请求的URL确定要执行的视图,帮助 Django 确定哪个视图应该处理特定的 URL 请求

  5. Middleware(中间件):中间件是Django的请求/响应处理机制的一部分。它可以在请求到达视图之前或响应发送给客户端之前执行特定的操作。中间件是位于Django请求和响应处理过程中的一个插件。例如,中间件可以用于身份验证、请求日志记录、跨站点请求伪造(CSRF)防护等

  6. Forms(表单):Django 表单帮助您创建 HTML 表单,并处理用户提交的数据。它们可以验证输入数据,并将其转换为模型对象。表单可以验证用户输入并将其保存到数据库中。

  7. Admin(管理后台):Django提供了一个强大的管理后台,可以轻松地管理数据库模型和数据。自动创建的管理界面允许管理员管理数据库中的数据,包括添加、编辑和删除记录。

  8. 静态文件处理:Django 提供了管理和服务静态文件(如 CSS、JavaScript)的功能。

此外,Django还包括许多其他组件和功能,如国际化、安全性等。

Django的项目结构

myproject/
    manage.py
    myproject/
        __init__.py
        settings.py
        urls.py
        wsgi.py
    myapp/
        migrations/
            __init__.py
        __init__.py
        admin.py
        apps.py
        models.py
        tests.py
        views.py
        urls.py
        templates/
            myapp/
                index.html
  • manage.py:用于管理Django项目的命令行工具。
  • myproject/:项目的主目录,包含项目的配置和URL设置。
  • myapp/:应用程序的目录,包含模型、视图、模板等。
  • migrations/:包含数据库迁移相关的文件。
  • admin.py:包含管理后台的配置。
  • models.py:包含应用程序的模型定义。
  • views.py:包含视图函数的定义。
  • urls.py:用于定义应用程序的URL模式。
  • templates/:包含HTML模板文件。
  • 其他文件:__init__.pyapps.pytests.py等。

这只是一个基本的Django项目结构示例,可以根据需要进行扩展和修改。

创建工程(4.2.6)

实例一:Hello world

1. 确保您已经安装了Django。如果尚未安装,请在命令行中运行以下命令:

pip install django

2. 创建一个新的Django项目。在命令行中导航到您想要创建项目的目录,并运行以下命令:

django-admin startproject myproject

3. 进入项目目录:

cd myproject

4. 创建一个新的Django应用程序。在命令行中运行以下命令:

python manage.py startapp myapp

5. 在myproject/myproject/settings.py文件中,找到ALLOWED_HOSTS并将其更改为以下内容:

ALLOWED_HOSTS = ['*']

* 表示允许任何主机访问您的Django应用程序,在生产环境中,您应该将ALLOWED_HOSTS设置为您信任的主机名或IP地址,以限制访问您的应用程序的来源 

6. 在myproject/myproject/urls.py文件中,添加以下代码:

from django.urls import path, include

urlpatterns = [
    path('', include('myapp.urls')),
]

7. 在myproject/myapp目录中,创建一个新的urls.py文件,并添加以下代码:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

8. 在myproject/myapp目录中,创建一个新的views.py文件,并添加以下代码:

from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, world!")

9. 返回到项目根目录,运行以下命令启动服务器:

python manage.py runserver 0.0.0.0:10808

10. 打开浏览器,并访问 http://localhost:10808/ ,您将看到 "Hello, world!" 的消息。

实例二:访问一个自定义主页

1. 确保在settings.py文件中,TEMPLATES设置中添加了应用程序的模板目录:

import os.path

TEMPLATES = [
    {
        ...
        'APP_DIRS': True,
        'DIRS': [os.path.join(BASE_DIR, 'myapp', 'templates')],
        ...
    },
]

这将告诉Django在`myapp`应用程序的`templates`目录中查找模板文件。

2. 在urls.py文件中正确配置了URL模式。如果您的应用程序位于项目的根目录下,可以将以下代码添加到urls.py文件中:

from django.urls import path
from myapp.views import index

urlpatterns = [
    path('', index, name='index'),   # ''标示没有地址访问默认目录index
    # 其他URL模式
]

''标示没有地址访问默认目录index 

确保`myapp.views`导入了正确的视图函数,并将根URL与`index`视图函数关联起来。

3. 确保在项目的settings.py文件中的INSTALLED_APPS设置中添加了应用程序

INSTALLED_APPS = [
    ...
    'myapp',
    ...
]

这将告诉Django加载`myapp`应用程序。

4. 进入myapp目录下创建文件夹templates

5. 编写index.html代码

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>这里是主页</title>
   <style>
       h1 { color:red }
   </style>
</head>
<body>
   <h1>这里是主页</h1>
</body>
</html>

6.  打开浏览器,并访问 http://localhost:10808/ 

实例三:通过登录跳转到主页

1. 创建一个名为login.html的模板文件

<html>
<head>
    <title>Login</title>
</head>
<body>
    <h1>Login</h1>
    {% if error_message %}
        <p>{{ error_message }}</p>
    {% endif %}
    <form method="post" action="{% url 'login' %}">
        {% csrf_token %}
        <label for="username">用户:</label>
        <input type="text" id="username" name="username"><br><br>
        <label for="password">密码:</label>
        <input type="password" id="password" name="password"><br><br>
        <input type="submit" value="登录">
    </form>
</body>
</html>

2. 在views.py文件中,您需要定义一个处理登录页面请求的视图函数

#! /usr/bin/env python
# -*- coding: utf-8 -*-

from django.shortcuts import render, redirect
from django.http import HttpResponse

# Create your views here.
def login(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        if username == 'admin' and password == '123456':
            # 登录成功,重定向至主页
            return redirect('index')
        else:
            # 登录失败,返回错误消息
            error_message = '用户名或密码错误'
            return render(request, 'login.html', {'error_message': error_message})
    else:
        return render(request, 'login.html')

def index(request):
    #return HttpResponse("Hello, world!")
    return render(request,'index.html')

3. 在urls.py文件中,需要将URL模式与登录视图函数关联起来,并指定默认访问地址为登录页。在urls.py文件中添加以下代码

from django.urls import path
from . import views

urlpatterns = [
    path('', views.login, name='login'),
    path('index/', views.index, name='index'),
]

4. 创建一个名为index.html的模板文件

<html>
<head>
    <title>主页</title>
</head>
<body>
    <h1>欢迎来到主页!</h1>
    <p>这是主页的内容.</p>
</body>
</html>

5.  打开浏览器,并访问 http://localhost:10808/ 

实例四:主页添加静态文件,包含js、css、图片

1. 在settings.py文件中,配置静态文件 STATIC_URLSTATICFILES_DIRS

STATIC_URL = 'static/'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'myapp', 'static'),                                                                                                                                           
]

2. myapp目录下创建static文件夹,static文件夹下分别创建js目录、css目录、images目录

3. 创建css文件styles.css

body {
  background-color: #f1f1f1;
  font-family: Arial, sans-serif;
}

h1 {
  color: blue;
}

p {
  font-size: 16px;
}

在这个示例中,CSS代码设置了一些基本的样式,如页面背景颜色、标题颜色和段落字体大小

主页引用

<link rel="stylesheet" type="text/css" href="{% static 'css/styles.css' %}">

4. 创建js文件script.js

console.log("你好, JavaScript!");

F12可查看控制台console日志

5. 创建图片logo.png

6. 主页完整代码

<!DOCTYPE html>
<html>
<head>
    <title>我的主页</title>
    <!--{% load static %}-->
    <link rel="stylesheet" type="text/css" href="{% static 'css/styles.css' %}">
</head>
<body>
    <h1>欢迎来到我的主页</h1>
    <img src="{% static 'images/logo.png' %}" alt="Logo">
    
    <p>这是主页内容.</p>
    
    <script src="{% static 'js/script.js' %}"></script>
</body>
</html>

7. 确保在使用static标签之前,始终在模板文件的顶部添加{% load static %}标签,以确保Django正确加载和解析静态文件模板标签.

8.  打开浏览器,并访问 http://localhost:10808/ 

实例五:访问api多级路径,传入json参数计算结果

1. 添加urls.py代码

path('api/add', views.add_numbers, name='add_numbers'),

2. 添加views.py代码

import json
from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse

@csrf_exempt
def add_numbers(request):
    if request.method == 'POST':
        try:
            data = json.loads(request.body)
            print(111, data)
            num1 = int(data.get('number1'))
            num2 = int(data.get('number2'))
            result = num1 + num2
            response_data = {'result': result}
            return JsonResponse(response_data)
        except (ValueError, TypeError):
            response_data = {'错误': '输入错误'}
            return JsonResponse(response_data, status=400)
    else:
        response_data = {'错误': '方法错误'}
        return JsonResponse(response_data, status=405)

禁用CSRF保护:这不是在生产环境中推荐的做法。在开发阶段,您可以在视图函数上使用@csrf_exempt装饰器来禁用CSRF保护。

3. 打开谷歌插件postwoman插件访问http://172.16.12.128:10808/api/add

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/116350.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

初识JVM

1. JVM内存区域划分 jvm在启动的时候&#xff0c;会申请到一整个很大的内存区域。整个一大块区域&#xff0c;不太好用。为了更方便使用&#xff0c;把整个区域隔成了很多区域&#xff0c;每个区域都有不同的作用。 本地方法栈 此处提到的栈和数据结构中的栈不是一个东西&…

axios 实现请求重试

前景提要&#xff1a; ts 简易封装 axios&#xff0c;统一 API 实现在 config 中配置开关拦截器 请求重试的核心是可以重放请求&#xff0c;具体实现就是在 axios 中&#xff0c;拿到当前请求的 config 对象&#xff0c;再用 axios 实例&#xff0c;就能重放请求。 在无感刷新…

iOS App Store上传项目报错 缺少隐私政策网址(URL)解决方法

iOS App Store上传项目报错 缺少隐私政策网址(URL)解决方法 一、问题如下图所示&#xff1a; 二、解决办法&#xff1a;使用Google浏览器&#xff08;翻译成中文&#xff09;直接打开该网址 https://www.freeprivacypolicy.com/free-privacy-policy-generator.php 按照要求…

面试10000次依然会问的【ReentrantLock】,你还不会?

引言 在并发编程的世界中&#xff0c;ReentrantLock扮演着至关重要的角色。它是一个实现了重入特性的互斥锁&#xff0c;提供了比synchronized关键字更加灵活的锁定机制。ReentrantLock属于java.util.concurrent.locks包&#xff0c;是Java并发API的一部分。 与传统的synchro…

ActiveMQ、RabbitMQ、RocketMQ、Kafka介绍

一、消息中间件的使用场景 消息中间件的使用场景总结就是六个字&#xff1a;解耦、异步、削峰 1.解耦 如果我方系统A要与三方B系统进行数据对接&#xff0c;推送系统人员信息&#xff0c;通常我们会使用接口开发来进行。但是如果运维期间B系统进行了调整&#xff0c;或者推送过…

【Redis】Redis在Linux与windows上的安装基本操作语法

一、Redis简介 Redis 是完全开源免费的&#xff0c;遵守BSD协议&#xff0c;是一个高性能的key-value数据库。 Redis 与其他 key - value 缓存产品有以下三个特点&#xff1a; Redis支持数据的持久化&#xff0c;可以将内存中的数据保持在磁盘中&#xff0c;重启的时候可以再…

突破性技术!开源多模态模型—MiniGPT-5

多模态生成一直是OpenAI、微软、百度等科技巨头的重要研究领域&#xff0c;但如何实现连贯的文本和相关图像是一个棘手的难题。 为了突破技术瓶颈&#xff0c;加州大学圣克鲁斯分校研发了MiniGPT-5模型&#xff0c;并提出了全新技术概念“Generative Vokens "&#xff0c…

mysql之基础语句

数据库的列类型 int&#xff1a;整型 用于定义整数类型的数据 float&#xff1a;单精度浮点4字节32位 准确表示到小数点后六位 double&#xff1a;双精度浮点8字节64位 char&#xff1a;固定长度的字符类 用于定义字符类型数据&…

Rust编程基础核心之所有权(下)

1.变量与数据交互方式之二: 克隆 在上一节中, 我们讨论了变量与数据交互的第一种方式: 移动, 本节将介绍第二种方式:克隆。 如果我们 确实 需要深度复制 String 中堆上的数据&#xff0c;而不仅仅是栈上的数据&#xff0c;可以使用一个叫做 clone 的通用函数。 看下面的代码…

Hybrid App(原生+H5)开发

介绍 市面上主流的hybrid app框架主要有 React Native&#xff1a;由FaceBook开发&#xff0c;使用JavaScript和React来构建原生应用程序Flutter&#xff1a;由Google开发&#xff0c;使用Dart语言。Flutter使用自己的渲染引擎Ionic&#xff1a;基于 Web 技术&#xff08;HTM…

网络安全(网络安全)小白自学

想自学网络安全&#xff08;黑客技术&#xff09;首先你得了解什么是网络安全&#xff01;什么是黑客&#xff01; 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全…

一、Hadoop初始化配置(final+ubuntu保姆级教程)

1、配置虚拟机 三台虚拟机&#xff0c;分别为node1、node2、node3&#xff0c;内存分别为4G、2G、2G&#xff0c;现存最好为&#xff08;>40G&#xff09;&#xff0c;如下&#xff1a; 2、修改主机名 分别打开三台虚拟机&#xff0c;root用户输入一下命令&#xff1a; no…

蓝桥杯官网填空题(方格填数)

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 在 2 行 5 列的格子中填入 1 到 10 的数字。 要求&#xff1a; 相邻的格子中的数&#xff0c;右边的大于左边的&#xff0c;下边的大于上边的。 如下图所示的 …

鸿蒙LiteOs读源码教程+向LiteOS中添加一个简单的基于线程运行时的短作业优先调度策略

一、鸿蒙Liteos读源码教程 鸿蒙的源码是放在openharmony文件夹下&#xff0c;openharmony下的kernel文件夹存放操作系统内核的相关代码和实现。 内核是操作系统的核心部分&#xff0c;所以像负责&#xff1a;资源管理、任务调度、内存管理、设备驱动、进程通信的源码都可以在…

Qt学习:图形视图框架的使用

文章目录 前言一、场景、视图和图形项的介绍二、图形视图框架的坐标系统三、图形视图框架的事件处理四、示例完整代码五、QtCreator官方示例总结 前言 近期重温了一下Qt中的图形视图框架&#xff0c;这里将所学习的内容进行记录总结。这个框架提供了一个基于图形项的模型视图编…

MySQL InnoDB数据存储结构

1. 数据库的存储结构&#xff1a;页 索引结构给我们提供了高效的索引方式&#xff0c;不过索引信息以及数据记录都是保存在文件上的&#xff0c;确切说是存储在页结构中。另一方面&#xff0c;索引是在存储引擎中实现的&#xff0c;MySQL服务器上的存储引擎负责对表中数据的读…

【漏洞复现】Fastjson_1.2.47_rce

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞检测3、漏洞验证 1.5、深度利用1、反弹Shell 说明内容漏洞编号漏洞名称Fastjson_1.2.47_远程执行漏…

【HarmonyOS】服务卡片 API6 JSUI跳转不同页面并携带参数

【关键字】 服务卡片、卡片跳转不同页面、卡片跳转页面携带参数 【写在前面】 本篇文章主要介绍开发服务卡片时&#xff0c;如何实现卡片点击跳转不同页面&#xff0c;并携带动态参数到js页面。在此篇文章“服务卡片 API6 JSUI跳转不同页面”中说明了如果跳转不同页面&#xf…

Py之auto-gptq:auto-gptq的简介、安装、使用方法之详细攻略

Py之auto-gptq&#xff1a;auto-gptq的简介、安装、使用方法之详细攻略 目录 auto-gptq的简介 1、版本更新历史 2、性能对比 推理速度 困惑度&#xff08;PPL&#xff09; 3、支持的模型 3、支持的评估任务 auto-gptq的安装 auto-gptq的使用方法 1、基础用法 (1)、量…

2023-11-04:用go语言,如果n = 1,打印 1*** 如果n = 2,打印 1*** 3*** 2*** 如果n = 3,打印

2023-11-04&#xff1a;用go语言&#xff0c;如果n 1&#xff0c;打印 1*** 如果n 2&#xff0c;打印 1***3*** 2*** 如果n 3&#xff0c;打印 1***3*** 2***4*** 5*** 6*** 如果n 4&#xff0c;打印 1***3*** 2***4*** 5*** 6***10** 9*** 8*** 7*** 输入…