Django学习记录

2023-10-28

目录

页面创建流程

框架应用

模板语法

请求和响应

实践:登录功能的实现

实践项目完善:数据库

表相关具体步骤:

列相关具体操作:

实际应用:


创建项目基本框架流程

  1. pycharm上下载django框架(setting里找到并下载)
  2. 创建项目:根目录终端命令:django-admin startproject 项目名称
    目录:
    | 项目名
    |____manage.py
    |____项目名文件夹
    |____|____urls.py    路由配置
    |____app名称
    |____|____views.py    常用
    |____|____models.py    操作数据库
    |____|____templates(自建文件夹,存放html文件)
    |____|____static(自建文件夹,存放css,js,image,plugins等)
  3. 创建app 终端命令:python manage.py startapp app名称

页面创建流程

  1. settings.py文件夹里注册app("app名.apps.xxxx")  xxxx=app名+config驼峰命名
  2. urls.py里添加路径  path("index/",views.index.html)
    需要先导入app文件(from app名称 import views)
  3. tempplates里面创建html文件
  4. 运行服务 python manage.py runserver
  5. 打开服务器,访问   /index/页面

框架应用

模板语法

可以写在html文件里,view对其进行渲染(替换)后返回给urls.py

{% for item in list %}

{% endfor %}
#循环语句

{% if var == something %}

{% else %}

{% endif %}
#条件语句

请求和响应

from django.shortcuts import HttpResponse, redirect

def something(request):
    #1获取请求方式(GRT/POST)(浏览器回车请求是get请求)
    print(request.method)

    #2在url上传递一些值(url?n1=123&n2=999)
    print(request.GET)

    #3在请求体中传递数据
    print(request.POST)

    #4[响应]返回 字符串
    return HttpResponse("返回内容")

    #5[响应]读取html内容->渲染(替换)->字符串,返回给浏览器
    return render(request ,'something.html',{"title":"来了"})

    #6[响应]浏览器重定向到其它页面
    return redirect("https://www.bilibili.com/")

实践:登录功能的实现

html:

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

views.py

#用户登录
def login(request):
    if request.method == "GET":
        return render(request,"login.html")

    #如果是post请求,获取用户提交的数据
    print(request.POST)
    username = request.POST.get("user")
    password = request.POST.get("passward")
    print(username == 'root' and password == "123")
    if username == 'root' and password == "123":
        # return HttpResponse("登录成功")
        return redirect("https://www.bilibili.com/")

    #return HttpResponse("登录失败")
    retu

会报错

 是因为django的安全保护机制,修改form表单,添加{% csrf_token %}

<form method="post" action="/login/">
        {% csrf_token %}

        <input type="text" name="user" placeholder="用户名">
        <input type="text" name="passward" placeholder="密码">
        <input type="submit" value="提交"/>
    </form>

实践项目完善:数据库

Django开发操作数据库比python直接用简单一点,内部提供了ORM框架

终端安装模块命令:pip install mysqlclient

ORM可以做:

        创建,修改,删除数据库中的表(无法创建数据库)

        操作表中的数据

表相关具体步骤:

  1. 用MySQL自带工具创建数据库
    create database self_django_db DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
  2. django连接数据库
    在settings.py里面改
    # DATABASES = {
    #     "default": {
    #         "ENGINE": "django.db.backends.sqlite3",
    #         "NAME": BASE_DIR / "db.sqlite3",
    #     }
    # }
    #修改数据库配置
    DATABASES = {
        'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME':'self_django_db',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        }
    }

3.django操作表

创建,删除,修改

在models.py文件里

class UserInfo(models.Model):
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    age = models.IntegerField()

"""
相当于
create table login_userinfo(
    id bigint auto_increment primary key,   #自动加
    name varchar(32),
    password varchar(64),
    age int
"""

执行命令:

终端:python manage.py makemigrations        和 python manage.py migrate

这样就可以自动创建表结构,在数据库里可以检验一下。

        补充:

        新增、修改表结构时,由于可能存在已有数据,对于新增的列要指定一下三者之一

                1手动输入一个值        2创建时设置默认值(default = xx) 

                 3允许为空(null = True blank = True)

想要操作数据库时,只需要修改model.py,再运行终端的两条命令即可。

列相关具体操作:

#新增数据
表名.objects.create(字段名=值)

#删除
表名.objects.filter(筛选条件).delete()
#筛选条件:filter(字段=值)     or      all()

#获取数据
#data_list = [行对象,行对象,行对象] QuertSet类型
data_list = 表名.objects.all()

#更新
表名.objects.all(),update(字段 =  值)

实际应用:

再views.py的函数里

#测试ORM
from login import models
def orm(requset):
    #测试orm中的数据
    #创建
    # models.Department.objects.create(title="销售部")
    # models.Department.objects.create(title="IT部")
    # models.Department.objects.create(title="运营部")
    #删除
    #models.Department.objects.all().delete()
    #获取数据
    data_list = models.Department.objects.all()
    print(data_list)
    for obj in data_list:
        print(obj.title)

    return HttpResponse("成功")

只要访问这个页面就会执行这些操作

项目实战:用户管理系统(数据库应用)

views.py中

def info_list(request):
    #1获取数据库中所有信息
    if request.method == "GET":
        data_list = UserInfo.objects.all()
        # print(data_list)

        return render(request,"info_list.html",{"data_list":data_list})

    # 添加用户  get看到页面,post提交写入数据库
    #获取提交数据
    user = request.POST.get("user")
    pwd = request.POST.get("pwd")
    age = request.POST.get("age")

    print()
    #添加到数据库
    UserInfo.objects.create(name=user, password=pwd, age=age)

    return redirect("/info_list/")

def delete(request):
    nid = request.GET.get('nid')
    UserInfo.objects.filter(id=nid).delete()
    return redirect("/info_list/")

html

<div>
    <table border="1">
      <thead>
        <tr>
          <th>ID</th>
          <th>姓名</th>
          <th>密码</th>
          <th>年龄</th>
          <th>操作</th>
        </tr>
      </thead>
      <tbody>
        {% for obj in data_list %}
          <tr>
            <td>{{obj.id}}</td>
            <td>{{obj.name}}</td>
            <td>{{obj.password}}</td>
            <td>{{obj.age}}</td>
            <td><a href="http://127.0.0.1:8000/info_del/?nid={{obj.id}}">删除</a></td>
          </tr>
        {% endfor %}
      </tbody>
    </table>

    <br>
    <h1>添加用户</h1>
    <form method="post">
      {% csrf_token %}
      <input type="text" name="user" placeholder="用户名">
      <input type="text" name="pwd" placeholder="密码">
      <input type="text" name="age" placeholder="年龄">
      <input type="submit" value="提交">
    </form>
  </div>

心得:每个页面对应一个函数,有的页面负责有展示html,有的页面负责实现特定功能(没有展示任务)。每个页面可以接收GET 和POST请求,可以根据请求地种类做出不同地反应

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django学习记录 的相关文章

  • Python有条件求解时滞微分方程

    我在用dde23 of pydelay包来求解延迟微分方程 我的问题 如何有条件地编写方程 例如目标方程有两个选项 when x gt 1 dx dt 0 25 x t tau 1 0 pow x t tau 10 0 0 1 x othe
  • Python从int到string的快速转换

    我正在用 python 求解大量阶乘 并发现当我完成计算阶乘时 需要相同的时间才能转换为字符串以保存到文件中 我试图找到一种将 int 转换为字符串的快速方法 我将举一个计算和 int 转换时间的例子 我正在使用通用的 a str a 但感
  • 如何使用显式引用转储 YAML?

    递归引用非常适合ruamel yaml or pyyaml ruamel yaml dump ruamel yaml load A A id001 id001 然而 它 显然 不适用于普通引用 ruamel yaml dump ruamel
  • 为什么我的代码不能根据字典解码加密字符串?

    我有一本字典 其中包含代表字母的键和值 例如一个简单的 DICT CODE b g n a p o x d t y 我收到了一个加密代码 并将该字符串转换为一个列表 其中每个项目都是一个单词 我需要根据字典中的项目来解决它 代码示例是 wo
  • 了解 Python 中的酸洗

    我最近接到一项作业 需要以腌制形式放置一本字典 其中每个键引用一个列表 唯一的问题是我不知道腌制形式是什么 谁能给我指出一些好的资源的正确方向来帮助我学习这个概念 pickle 模块实现了一个基本但强大的算法 用于序列化和反序列化 Pyth
  • 当我在 Pandas 中使用 df.corr 时,我的一些列丢失了

    这是我的代码 import numpy as np import pandas as pd import seaborn as sns import matplotlib pyplot as plt data pd read csv dea
  • 登录网站并使用 python 请求下载文件

    我有一个带有 HTML 表单的网站 登录后 它会将我带到 start php 站点 然后将我重定向到overview php 我想从该服务器下载文件 当我单击 ZIP 文件的下载链接时 链接后面的地址是 getimage php path
  • WindowsError:[错误 126] 使用 ctypes 加载操作系统时

    python代码无法在Windows 7平台上运行 def libSO lib ctypes cdll LoadLibrary ConsoleApplication2 so lib cfoo2 1 3 当我尝试运行它时 得到来自python
  • Apache Spark 中的高效字符串匹配

    我使用 OCR 工具从屏幕截图中提取文本 每个大约 1 5 句话 然而 当手动验证提取的文本时 我注意到时不时会出现一些错误 鉴于文本 你好 我真的很喜欢 Spark 我注意到 1 像 I 和 l 这样的字母被 替换 2 表情符号未被正确提
  • `list()` 被认为是一个函数吗?

    list显然是内置类型 https docs python org 3 library stdtypes html list在Python中 我看到底下有一条评论this https stackoverflow com a 53645813
  • 与 while 循环一样,如何跳过 for 循环中的步骤?

    我尝试像 while 循环一样跳过 for 循环中的几个步骤 在 while 循环中 步骤根据特定条件进行调整 如下面的代码所示 i 0 while i lt 10 if i 3 i 5 else print i i i 1 result
  • Python 惰性迭代器

    我试图了解迭代器表达式如何以及何时被求值 以下似乎是一个懒惰的表达 g i for i in range 1000 if i 3 i 2 然而 这个在构造上失败了 g line strip for line in open xxx r if
  • 具有屏蔽无效值的 pcolormesh

    我试图将一维数组绘制为 pcolormesh 因此颜色沿 x 轴变化 但每个 x 的 y 轴保持不变 但我的数据有一些错误值 因此我使用屏蔽数组和自定义颜色图 其中屏蔽值设置为蓝色 import numpy as np import mat
  • Python 类型安全吗?

    根据维基百科 https en wikipedia org wiki Type system Type safety and memory safety 如果一种语言不允许违反类型系统规则的操作或转换 计算机科学家就认为该语言是 类型安全的
  • 在 Sphinx 中,有没有办法在声明参数的同时记录参数?

    我更喜欢在声明参数的同一行记录每个参数 根据需要 以便应用D R Y http en wikipedia org wiki Don t repeat yourself 如果我有这样的代码 def foo flab nickers a ser
  • Python]将两个文本文件合并为一个(逐行)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我是蟒蛇新手 我想做的是将文件 a 和文件 b 逐行合并到一个文件中 例如 text file a a n b n c text fi
  • 如何使用 matplotlib 为圆柱体的每个单独面添加颜色

    我正在尝试为圆柱体的每个面着色 但是我不确定如何进行 我尝试了以下方法 for i in range 10 col append for i in range 10 for j in range 20 col i append plt cm
  • python sklearn中的fit方法

    我问自己关于 sklearn 中拟合方法的各种问题 问题1 当我这样做时 from sklearn decomposition import TruncatedSVD model TruncatedSVD svd 1 model fit X
  • 如何获取所有mysql元组结果并转换为json

    我能够从表中获取单个数据 但是当我试图获取表上的所有数据时 我只得到一行 cnn execute sql rows cnn fetchall column t 0 for t in cnn description for row in ro
  • 缓存 Flask-登录 user_loader

    我有这个 login manager user loader def load user id None return User query get id 在我引入 Flask Principal 之前它运行得很好 identity loa

随机推荐

  • java代码规范检查(遵循阿里巴巴开发)

    java代码规范检查 遵循阿里巴巴开发 基于代码的部署 后期测试与维护 需要对代码进行检查 在这里遵循阿里巴巴集团的开发规范 有兴趣的可以去参考阿里巴巴出版的一本书 阿里巴巴Java开发手册 eclipse安装代码规范检查插件 环境 JDK
  • 如何使用nuget中的FastReport.Core库

    https www cnblogs com wxchuachua p 10167508 html 下载FastReport Net最新版本 FastReport Net 2018新功能之一 使用nuget数据包 要安装软件包 必须创建一个本
  • c/c++将tuple展开/解包到不定参数列表中

    目录 问题引入 问题提出 引入templete lt size t Is gt 模板 获取不定参数模板的索引模板 问题引入 现在想实现这样一个模板类 将不定参通过commit函数提交到工作队列 然后由一个线程从队列中取出数据 调用proce
  • c# 创建自绘用户控件

    一 继承UserControl类 public class Chart UserControl 二 定义常量 私有成员变量 属性 加入属性的修饰 可以在图形界面配置 private const int LeftPos 60 private
  • 多因素方差分析中预测因素的筛多_用回归来理解方差分析(二):两因素方差分析...

    1 两因素方差分析的形式 多因素方差分析针对的是多因素完全随机设计 包含两个及以上的自变量 为便于讲解 本文以两因素方差分析为例 在一个两因素完全随机设计中 自变量 包含 共 个水平 自变量 包含 共 个水平 总共形成 个处理 各处理 之下
  • LUN磁盘、LVM及JFS2驱动内部关系

    复杂度2 5 机密度3 5 最后更新2021 04 30 LUN Logical Unit Number 是scsi专用概念 指在同一SCSI设备 同SCSI ID 下映射的逻辑子设备 这来自最早SCSI设备是总线结构 可以支持一个或两个i
  • 作业一

    计算器思路 单位数计算器 package com marden demo3 单位数表达式 public class Calculator 判断是否为操作符 public static boolean isOper char value re
  • 递归的方式将整数转换为字符串输出

    include
  • VSCode显示所有以打开的文件

    VSCode显示所有以打开的文件
  • MAC安装redis最简单的方法

    一 安装命令 使用mac的包管理工具brew一行命令搞定安装 若未安装brew 命令行先输入以下命令安装brew usr bin ruby e curl fsSL https raw githubusercontent com Homebr
  • [kitex + gorm-gen + hertz] 快速写出一个基于go的微服务

    kitex gorm gen hertz 快速写出一个kitex的微服务 0 目的 1 环境安装 2 定义 用户的 IDL 3 kitex 自动代码生成 4 导入goland 5 Demo 5 1 服务端编写handler 假数据 5 2
  • 【C++入门】不能重载为友元函数的4个运算符(=, ->, [ ], ( ))

    1 什么是友元函数 参考博客 C 入门 友元函数详解 定义 实现 优缺点 2 什么是运算符重载 参考博客 C 入门 运算符重载详解 3 赋值运算符的示例代码 3 1 不重载赋值运算符 3 1 1 示例代码 include
  • 打不开Microsoft store 解决方法

    打不开Microsoft store 解决方法 方法一 按 windows键 R 打开 运行 窗口 输入 inetcpl cpl 后点确定 点击 高级 勾选上 使用TLS 1 2 或者 点击 还原高级设置 注意 选一个就行 再次打开 微软商
  • 129-----JS基础-----修改div移动练习(定时器相关练习)

    一 代码 之前我们在123节时 讲过键盘事件来修改div移动的练习 但是在按下键盘的开始时刻 键盘会有点卡顿的感觉 这是正常的 主要是为了防止人们误操作的行为 但是这样就导致我们如果想要速度是连续的话 这个开始的卡顿是明显不符合需求的 所以
  • Android开发 使用BottomNavigationView控件 实现底部导航栏功能 详细介绍(上)

    Android开发 使用BottomNavigationView控件 实现底部导航栏功能 在一次项目中 由于要实现多个功能同时还要更好地利用屏幕的空间 所以使用底部导航栏来实现功能之间的切换 而且这种界面在实际应用中十分的常见 所以这里打算
  • SourceTree使用技巧

    一 常见代码合并问题 1 当多个人一起开发 a可能开发a模块 b可能开发b模块 但是当开发完后需要提交 这两个人开发的其实是一个版本 所以我们要合并代码提交 例如 我现在在demo用户 我需要将github的代码合并到我这 我需要点击进入我
  • Spring IoC 容器的概念

    IoC 是控制反转的意思 简单来说 就是创建对象的时候不是你主动创建 而是由 Spring 框架负责控制对象的生命周期和对象间的关系 Spring 容器是 Spring 框架的核心 容器将创建对象 把它们连接在一起 配置它们 并管理他们的整
  • html 弹窗 登陆,js控制弹出框仅在登录时弹出一次

    如何控制弹出框只在登录完成时弹出一次 关掉就不会再出来 切到别的页面也不会弹出来 下一次登录时才会再次弹出来 我现在做到的就是每次切到首页都会弹出 因为我在首页写了这样一段js代码 document ready function var u
  • win10系统Texlive2017安装及出现问题

    2018 1 26 正常情况下 按照这个来就没问题 Texlive2017安装 可是我的点击install tl advanced出现不了安装界面 直接cmd出来一堆 最后还跟我goodbye 经查证 真实有效 系统环境变量PATH和Pat
  • Django学习记录

    目录 页面创建流程 框架应用 模板语法 请求和响应 实践 登录功能的实现 实践项目完善 数据库 表相关具体步骤 列相关具体操作 实际应用 创建项目基本框架流程 pycharm上下载django框架 setting里找到并下载 创建项目 根目