Python Django 详解(基础)

文章目录

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

1 概述

1.1 安装 django

python 复制代码
> 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

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

2.4 访问

3 快速上手

3.1 templates:html 模板


3.2 static:静态文件


3.3 模板语法

views.py

python 复制代码
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:

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

python 复制代码
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:

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

urls.py

python 复制代码
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

python 复制代码
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:

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

python 复制代码
"""
from django.contrib import admin
from django.urls import path

from app01 import views

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

    # 用户登录
    path('login/', views.login)
]
相关推荐
亿牛云爬虫专家1 小时前
Kubernetes下的分布式采集系统设计与实战:趋势监测失效引发的架构进化
分布式·python·架构·kubernetes·爬虫代理·监测·采集
蹦蹦跳跳真可爱5895 小时前
Python----OpenCV(图像増强——高通滤波(索贝尔算子、沙尔算子、拉普拉斯算子),图像浮雕与特效处理)
人工智能·python·opencv·计算机视觉
nananaij5 小时前
【Python进阶篇 面向对象程序设计(3) 继承】
开发语言·python·神经网络·pycharm
雷羿 LexChien5 小时前
从 Prompt 管理到人格稳定:探索 Cursor AI 编辑器如何赋能 Prompt 工程与人格风格设计(上)
人工智能·python·llm·编辑器·prompt
敲键盘的小夜猫6 小时前
LLM复杂记忆存储-多会话隔离案例实战
人工智能·python·langchain
高压锅_12206 小时前
Django Channels WebSocket实时通信实战:从聊天功能到消息推送
python·websocket·django
胖达不服输7 小时前
「日拱一码」020 机器学习——数据处理
人工智能·python·机器学习·数据处理
吴佳浩8 小时前
Python入门指南-番外-LLM-Fingerprint(大语言模型指纹):从技术视角看AI开源生态的边界与挑战
python·llm·mcp
吴佳浩8 小时前
Python入门指南-AI模型相似性检测方法:技术原理与实现
人工智能·python·llm
叶 落8 小时前
计算阶梯电费
python·python 基础·python 入门