Python Django 详解(基础)

news2024/11/17 1:29:25

文章目录

  • 1 概述
    • 1.1 安装 django
    • 1.2 创建 django 项目
    • 1.3 创建 app
  • 2 启动 Django
    • 2.1 settings.py:注册 app
    • 2.2 view.py:URL和视图对应
    • 2.3 启动 Django
    • 2.4 访问
  • 3 快速上手
    • 3.1 templates:html 模板
    • 3.2 static:静态文件
    • 3.3 模板语法
    • 3.4 请求和响应
    • 3.5 表单

1 概述

1.1 安装 django

> pip install django

1.2 创建 django 项目

  • [File] - [New Project...] - [Django] - 设置 Location 和 解释器 - [create]

固定,不用动的文件:
    asgi.py:接收网络请求(异步)
    wsgi.py:接收网络请求(同步)

重要,需要经常操作的文件:
    urls.py:URL和函数的对应关系
    settings.py:项目配置

在这里插入图片描述

1.3 创建 app

  • 命令窗口执行命令:python manage.py startapp app01(其中 app01 为自定义项目名)

固定,不用动的文件:
    admin.py:后台管理
    apps.py:app启动类
    migrations:数据库变更记录
    test.py:单元测试

重要,经常操作的文件:
    models.py:对数据库操作
    views.py:函数(对应上述 1.2 Django 项目中的 urls.py 文件)

在这里插入图片描述

2 启动 Django

2.1 settings.py:注册 app

在这里插入图片描述

2.2 view.py:URL和视图对应

在这里插入图片描述

2.3 启动 Django

在这里插入图片描述

> # 指定IP地址和端口
> python manage.py runserver 127.0.0.1:8080

2.4 访问

在这里插入图片描述

3 快速上手

3.1 templates:html 模板

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

3.2 static:静态文件

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

3.3 模板语法

在这里插入图片描述

views.py:

from django.shortcuts import render, HttpResponse


# Create your views here.
# 入参 request 是必选项
def index(request):
    return HttpResponse("Hello World!")


def user_list(request):
    # 对应 settings.py 中的 'DIRS': [os.path.join(BASE_DIR, 'templates')]
    # 若 settings.py 中设为 'DIRS': [] 则表示 app 目录下的 templates
    name = "张三"
    roles = ["超级管理员", "管理员", "用户"]
    user_info = {"name": "张三", "salary": 10000, "role": "超级管理员"}
    data_list = [
        {"name": "张三", "salary": 10000, "role": "超级管理员"},
        {"name": "李四", "salary": 30000, "role": "管理员"},
        {"name": "王五", "salary": 20000, "role": "用户"}
    ]
	# k1-k4:自定义的 key,name、roles.. 为上述定义的值
    return render(request, 
   			      "user_list.html", 
   			      {"k1": name, 
   			       "k2": roles, 
   			       "k3": user_info, 
   			       "k4": data_list})

user_list.html:

{% load static %} <!-- 导入 static 文件 -->

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1> 模板语法 </h1>
<div>{{ k1 }}</div>
<hr/>
<!-- k2: 原样显示,k2.:显示某项 -->
<!-- 数组 -->
<div>{{ k2 }}</div>
<div>{{ k2.0 }}</div>
<div>{{ k2.1 }}</div>
<div>{{ k2.2 }}</div>
<div>
    {% for item in k2 %}
        <span>{{ item }}</span>
    {% endfor %}
</div>
<hr/>
<!-- 字典 -->
{{ k3 }}
{{ k3.name }}
{{ k3.salary }}
{{ k3.role }}
<ul>
    {% for key, value in k3.items %}
        <li>{{ key }} = {{ value }}</li>
    {% endfor %}
</ul>
<hr/>
<!-- 复合结构 -->
{{ k4 }}
{{ k4.0 }}
{{ k4.0.name }}
{% for item in k4 %}
    <div>{{ item.name }} : {{ item.salary }}</div>
{% endfor %}
<hr/>
<!-- 条件判断 -->
{% if k1 == "张三" %}
    <h1> 我是张三 </h1>
{% elif k1 == "李四" %}
    <h1> 我是李四 </h1>
{% else %}
    <h1> 我是.. </h1>
{% endif %}
</body>
</html>

浏览器效果:
在这里插入图片描述

3.4 请求和响应

view.py:

from django.shortcuts import render, HttpResponse, redirect


# Create your views here.
def request_response(request):
    # request 是一个对象,封装了用户发送过来的所有请求相关数据

    # 1.【请求】获取请求的方式 GET/POST
    print(request.method)

    # 2.【请求】GET:在 URL 上传递值,速度快,但用户可见
    # 若浏览器输入:http://127.0.0.1:8000/request_response?n=1&m=2
    # 则此处输出值:<QueryDict: {'n': ['1'], 'm': ['2']}>
    print(request.GET)

    # 3.【请求】POST:在 请求体 中传递值,用户不可见
    print(request.POST)

    # 4.【响应】将字符串的内容返回给请求者
    # return HttpResponse("返回内容")

    # 5.【响应】读取HTML的内容 + 渲染(替换)
    #return render(request, "request_response.html", {"title": "我来了"})

    # 6.【响应】重定向
    return redirect("https:www.baidu.com")

templates 目录下新建 request_response.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1> 某些请求 {{ title }}</h1>
</body>
</html>

urls.py:

from django.urls import path

from app01 import views

urlpatterns = [
    # path('admin/', admin.site.urls),
    path('index/', views.index),

    path('user/list', views.user_list),

    # 请求和响应
    path('request_response', views.request_response)
]

3.5 表单

views.py:

from django.shortcuts import render, HttpResponse, redirect


# Create your views here.
def login(request):
    if request.method == "GET":
        return render(request, "login.html")

    # 如果是 POST 请求,则获取用户提交的数据
    userName = request.POST.get("user")
    passWord = request.POST.get("pwd")
    if userName == 'admin' and passWord == "123":
        return HttpResponse("登录成功!")
    else:
        return render(request, "login.html", {"error_msg": "用户名或密码错误"})

templates 目录下新建 login.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>用户登录</h1>
<form action="/login/" method="post">
    {% csrf_token %}
    <input type="text" name="user" placeholder="用户名">
    <input type="password" name="pwd" placeholder="密码">
    <input type="submit" value="提交"> {{ error_msg}}
</form>
</body>
</html>

在这里插入图片描述

urls.py:

"""
from django.contrib import admin
from django.urls import path

from app01 import views

urlpatterns = [
    # path('admin/', admin.site.urls),

    # 用户登录
    path('login/', views.login)
]

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端JavaScript入门到精通,javascript核心进阶ES6语法、API、js高级等基础知识和实战 —— JS进阶(一)

思维导图 一、作用域 1.1 局部作用域 let和const声明的才有块作用域 1.2 全局作用域 1.3 作用域链 1.4 JS垃圾回收机制 1.5 闭包 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Comp…

Qt元对象系统 day5

Qt元对象系统 day5 内存管理 QObject以对象树的形式组织起来&#xff0c;当为一个对象创建子对象时&#xff0c;子对象回自动添加到父对象的children()列表中。父对象拥有子对象所有权&#xff0c;比如父对象可以在自己的析构函数中删除它的孩子对象。使用findChild()或findC…

怎么压缩ppt文件?

怎么压缩ppt文件&#xff1f;造成ppt文件体积太大的原因主要有两个&#xff1a;① 图片和媒体文件&#xff0c;PPT中使用高分辨率、大尺寸的图片或视频文件会增加文件大小。如果未经压缩或优化&#xff0c;这些文件可能会占用较大的存储空间&#xff1b;② 动画和特效&#xff…

【Unity3D编辑器开发】Unity3D中制作一个可以随时查看键盘对应KeyCode值面板,方便开发

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 在开发中&#xff0c;会遇到要使用监控键盘输入的KeyCode值来执…

十七、C语言内存函数

1 memcpy函数的使用和模拟实现 //memcpy函数的声明 void* memcpy(void* destination, const void* source, size_t num);memcpy函数可以给内存进行拷贝&#xff0c;由于不知道要拷贝的内存中存放的是哪一种类型的数据&#xff0c;所以memcpy函数的返回类型设置成了void*。 me…

【2023全网最全最火】Selenium WebDriver教程(建议收藏)

在本教程中&#xff0c;我将向您介绍 Selenium Webdriver&#xff0c;它是当今市场上使用最广泛的自动化测试框架。它是开源的&#xff0c;可与所有著名的编程语言&#xff08;如Java、Python、C&#xff03;、Ruby、Perl等&#xff09;一起使用&#xff0c;以实现浏览器活动的…

如何使用jest

最近在研究单元测试&#xff0c;虽说前端如果不是大且的项目不必要加&#xff0c;但至少得会&#xff0c;因此花了些时间研究&#xff0c;以下是我总结jest的使用。 jest是什么&#xff1f; Jest是 Facebook 的一套开源的 JavaScript 测试框架&#xff0c; 它自动集成了断言、…

bert入门

bert是什么 BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;是一种自然语言处理&#xff08;NLP&#xff09;中的预训练模型&#xff0c;它是基于Transformer架构的一种深度学习模型。BERT的主要目标是在大规模文本语料库上进行预训练&a…

自动求导,计算图示意图及pytorch实现

pytorch实现 x1 torch.tensor(3.0, requires_gradTrue) y1 torch.tensor(2.0, requires_gradTrue) a x1 ** 2 b 3 * a c b * y1 c.backward() print(x1.grad) print(y1.grad) print(x1.grad 6 * x1 * y1) print(y1.grad 3 * (x1 ** 2))输出为&#xff1a; tensor(36.) …

uniapp-vue3-弹出选择组件wo-pop-selector

wo-pop-selector弹出选择组件采用uniapp-vue3实现, 支持H5、微信小程序&#xff08;其他小程序未测试过&#xff0c;可自行尝试&#xff09; 可到插件市场下载尝试&#xff1a; https://ext.dcloud.net.cn/plugin?id14879 使用示例 <template><view><view c…

GBU808-ASEMI小功率开关电源GBU808

编辑&#xff1a;ll GBU808-ASEMI小功率开关电源GBU808 型号&#xff1a;GBU808 品牌&#xff1a;ASEMI 芯片个数&#xff1a;4 封装&#xff1a;GBU-4 恢复时间&#xff1a;&#xff1e;50ns 工作温度&#xff1a;-55C~150C 浪涌电流&#xff1a;200A 正向电流&#…

微信小程序报错request:fail -2:net::ERR_FAILED(生成中间证书)

微信小程序报错request:fail -2:net::ERR_FAILED-生成中间证书 前言一、检查网站ssl证书二、生成证书方法1.获取中间证书手动合并1.进入网站&#xff1a;[https://www.myssl.cn/tools/downloadchain.html](https://www.myssl.cn/tools/downloadchain.html)2.点击下一步3.手动合…

【Vue面试题十四】、说说你对vue的mixin的理解,有什么应用场景?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;说说你对vue的mixin的理…

abap代码优化和性能调优工具

select/end select与loop类似是循环&#xff08;一个是对数据库表&#xff0c;一个是对内表&#xff09; select *效率低于select 字段1 字段2... select 主键1 主键2 主键3 非主键4效率高于select 主键1 主键2 非主键4. into table 内表效率高于into corresponding fields …

Linux动态链接库.so文件

一、动态库和静态库的区别 库是一个二进制文件&#xff0c;包含的代码可以被程序调用&#xff0c;如标准库、线程库。Windows 和 Linux下的库文件格式不兼容。 Windows环境&#xff1a;静态库是 .lib 文件&#xff0c;共享库是 .dll 文件 Linux环境&#xff1a;静态库是 .a 文…

IC工程师职场必备《经典Verilog100多个代码案例》(附下载)

对于IC行业的人员而言&#xff0c;Verilog是最基础的入门&#xff0c;用于数字电路的系统设计&#xff0c;很多的岗位都会用到&#xff0c;可对算法级、门级、开关级等多种抽象设计层次进行建模。 Verilog由于其简单的语法&#xff0c;和C语言的相似性&#xff0c;目前被各大公…

uni-app:js时间与时间戳之间的转换

运行结果 代码 <template><view></view> </template><script>export default {data() {return {}},onLoad() {//时间转换为时间戳&#xff08;十位时间戳即秒级时间戳&#xff09;const time 2023-10-01 12:34:56; // 时间格式为年-月-日 时:分…

BlowFish加解密原理与代码实现

BlowFish加解密原理与代码实现 一丶简介 ​ BlowFish 是一个对称加密的加密算法。由Bruce Schneier&#xff0c;1993年设计的。是一个免费自由使用的加密算法。 了解的必要知识 BlowFish是一个对称区块加密算法。每次加密数据为 64位 &#xff08;2个int)类型数据大小。八个…

Maven 引入外部依赖

如果我们需要引入第三方库文件到项目&#xff0c;该怎么操作呢&#xff1f; pom.xml 的 dependencies 列表列出了我们的项目需要构建的所有外部依赖项。 要添加依赖项&#xff0c;我们一般是先在 src 文件夹下添加 lib 文件夹&#xff0c;然后将你工程需要的 jar 文件复制到 …

mac(M1)卸载miniconda3

参考https://stackoverflow.com/questions/29596350/how-to-uninstall-mini-conda-python step1 因为我目前只有一个base环境&#xff0c;所以直接在这个环境中安装 anaconda-clean即可 conda install anaconda-clean然后继续输入 anaconda-clean如果不加–yes&#xff0c;那…