Django 7 实现Web便签

一、效果图

二、会用到的知识

  • 目录结构与URL路由注册
  • request与response对象
  • 模板基础与模板继承
  • ORM查询
  • 后台管理

三、实现步骤

1. terminal 输入 django-admin startapp the_10回车

2. 注册, 在 tutorial子文件夹settings.py INSTALLED_APPS 中括号添加 "the_10"

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    "the_3",
    "the_5",
    "the_6",
    "the_7",
    "the_8",
    "the_9",
    "the_10",
]

3. 路由 tutorial子文件夹 urls.py 

urlpatterns = [
    path('admin/', admin.site.urls),
    path('the_3/', include('the_3.urls')),
    path('the_4/', include('the_4.urls')),
    path('the_5/', include('the_5.urls')),
    path('the_7/', include('the_7.urls')),
    path('the_10/', include('the_10.urls')),
]

4. the_10文件夹新建子文件夹 urls.py

from django.urls import path
from .views import index


urlpatterns = [
    path('index/', index),
]

5. the_10文件夹内的 views.py 

from django.shortcuts import render

# Create your views here.

def index(request):
    return render(request, "the_10/the_10_index.html")

6. templates 文件夹创建 the_10子文件夹,再在the_10子文件夹 创建 the_10_index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>web便签</title>
</head>
<body>
    <h1>hello 2024</h1>
</body>
</html>

7. 运行tutorial, 点击 http://127.0.0.1:8000/, 地址栏 https://127.0.0.1:8000/the_10/index/

8. the_10_index.html 代码 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>web便签</title>
    <style>
        {# 归零#}
        *{
            padding: 0;
            margin: 0;
        }
        .appbar{
            height: 100px;
            color: rgb(92,53,21);
            /*给阴影*/
            text-shadow: 0 0 2px red;
            font-size: 60px;
        }
        .main{
            display: flex;
        }
        .content{
            width: 90%;
            height: 700px;
            display: flex;
        }
        .sidebar{
            width: 10%;
            height: 400px;
            font-size: 30px;
            /*文字上下展示,从右向左读*/
            writing-mode: vertical-rl;
            text-shadow: 3px 5px 5px  gray;
        }
        .footer{
            width: 100%;
            background: gray;
            text-align: center;
            color: white;
            padding: 5px 0;
            position: fixed;
            bottom: 0;
        }

        .card{
            align-content: center;
            display: flex;
            flex-wrap:wrap;
            align-items: center;
            width: 200px;
            height: 200px;
            background: rgb(138,109,53);
            justify-content: space-around;
            margin: 10px;
            padding: 10px;
        }
        .card .msg{
            width: 100%;
            text-align: left;
            color: white;
        }
        .card .username{
            width: 100%;
            text-align: right;
            color: red;
        }
    </style>
</head>
<body>
{#页眉#}
    <div class="appbar">
        人生苦短,我用python
    </div>
{#主体#}
    <div class="main">
{#        左边#}
        <div class="content">
            <div class="card">
                <div class="msg">
                    小明,记得好好吃饭哦!
                </div>
                <div class="username">
                    python大佬
                </div>
            </div>
            <div class="card">
                <div class="msg">
                    python大佬,记得明天是项目截止日期!
                </div>
                <div class="username">
                    python大佬的老大
                </div>
            </div>
        </div>
{#        右边#}
        <div class="sidebar">
            这世上本没有路,走的人多了,也便成了路!
        </div>
    </div>
{#页脚#}
    <div class="footer">
        Copyright C 1970-2077 Python大佬 All Rights Reserved.
    </div>
</body>
</html>

9. 刷新浏览器,实现效果 

四、继承

1. 在templates\the_10 创建base.html

2. 把the_10_index.html里面的内容全部复制到base.html里面, 然后清空the_10_index.html里面的内容, 然后写入 {% extends 'the_10/base.html' %}

{% extends 'the_10/base.html' %}

3. 刷新浏览器,发现也能打印,证明the_10/已经引入成功

4. 在最外面的tutorial文件夹创建一个static的文件夹,专门用来存放css,js等内容, 然后在static文件夹创建一个css的文件,再在css文件夹创建the_10_base.css文件

5. 把base.html里面style里面的样式内容全部剪切到the_10_base.css里面,删除style标签,然后在the_10_base.css里面改下注释

        /*归零*/
        *{
            padding: 0;
            margin: 0;
        }
        .appbar{
            height: 100px;
            color: rgb(92,53,21);
            /*给阴影*/
            text-shadow: 0 0 2px red;
            font-size: 60px;
        }
        .main{
            display: flex;
        }
        .content{
            width: 90%;
            height: 700px;
            display: flex;
        }
        .sidebar{
            width: 10%;
            height: 400px;
            font-size: 30px;
            /*文字上下展示,从右向左读*/
            writing-mode: vertical-rl;
            text-shadow: 3px 5px 5px  gray;
        }
        .footer{
            width: 100%;
            background: gray;
            text-align: center;
            color: white;
            padding: 5px 0;
            position: fixed;
            bottom: 0;
        }

        .card{
            align-content: center;
            display: flex;
            flex-wrap:wrap;
            align-items: center;
            width: 200px;
            height: 200px;
            background: rgb(138,109,53);
            justify-content: space-around;
            margin: 10px;
            padding: 10px;
        }
        .card .msg{
            width: 100%;
            text-align: left;
            color: white;
        }
        .card .username{
            width: 100%;
            text-align: right;
            color: red;
        }

6. 我想用这个样式 需要去tutorial\settings.py里面进行配置

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    BASE_DIR / "static",
]

7. 配置好以后需要引入, 在templates\the_10\base.html 最上面添加 {% load static %}, 然后添加link标签 <link rel="stylesheet" href="{% static 'css/the_10_base.css'%}">

{% load static %}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>web便签</title>
    <link rel="stylesheet" href="{% static 'css/the_10_base.css'%}">
</head>
<body>
{#页眉#}
    <div class="appbar">
        人生苦短,我用python
    </div>
{#主体#}
    <div class="main">
{#        左边#}
        <div class="content">
            <div class="card">
                <div class="msg">
                    小明,记得好好吃饭哦!
                </div>
                <div class="username">
                    python大佬
                </div>
            </div>
            <div class="card">
                <div class="msg">
                    python大佬,记得明天是项目截止日期!
                </div>
                <div class="username">
                    python大佬的老大
                </div>
            </div>
        </div>
{#        右边#}
        <div class="sidebar">
            这世上本没有路,走的人多了,也便成了路!
        </div>
    </div>
{#页脚#}
    <div class="footer">
        Copyright C 1970-2077 Python大佬 All Rights Reserved.
    </div>
</body>
</html>

8. 刷新浏览器,样式就有了,页面如步骤3

9. 对templates\the_10\base.html里面的content内容进行挖坑

10. 把上面的内容复制到the_10_index.html里面,然后把templates\the_10\base.html里面block内的内容删掉

the_10_index.html

{% extends 'the_10/base.html' %}

{% block content %}
<div class="card">
    <div class="msg">
        小明,记得好好吃饭哦!
    </div>
    <div class="username">
        python大佬
    </div>
</div>
<div class="card">
    <div class="msg">
        python大佬,记得明天是项目截止日期!
    </div>
    <div class="username">
        python大佬的老大
    </div>
</div>
{% endblock %}

templates\the_10\base.html

11. 刷新浏览器,效果如步骤3

五、前后端交互

1. the_10\views.py做如下修改

from django.shortcuts import render


# Create your views here.

def index(request):
    l = [
        {'msg':'小红,一定要记得好好吃饭哦!', 'username':'python大佬'},
        {'msg': 'python大佬,记得明天是项目截止日期!一定要交,不交不准下班!', 'username': 'python大佬的老大'},
    ]
    return render(request, "the_10/the_10_index.html",{'cards':l})

2. templates\the_10\the_10_index.html

{% extends 'the_10/base.html' %}

{% block content %}
    {% for i in cards %}
    <div class="card">
    <div class="msg">
        {{ i.msg }}
    </div>
    <div class="username">
        {{ i.username }}
    </div>
</div>
    {% endfor %}
{% endblock %}

3. 刷新网页,自定义的内容就渲染出来了,这个就叫前后端不分离。

4. 这样就可以通过后端控制前端的内容,如果我们再加一条, 刷新网页,就自动加进去了。

{'msg': '还有一个月,就到农历新年了!', 'username': 'python大佬'},

六、连接数据库

1. the_10\models.py 写入代码

from django.db import models

# Create your models here.

class Card(models.Model):
    msg = models.CharField(max_length=200)
    # user = models.OneToOneField('auth.User',on_delete=models.CASCADE) # 一个用户只能发一个便签
    user = models.ForeignKey('auth.User', on_delete=models.CASCADE) # 一个用户可以发多个便签

    def __str__(self):
        return self.msg

2. 迁移 , terminal 输入 python .\manage.py makemigrations回车

Migrations for 'the_10':
  the_10\migrations\0001_initial.py
    - Create model Card  

3. terminal 再输入 python .\manage.py migrate 回车

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions, the_10, the_6, the_8, the_9
Running migrations:
  Applying the_10.0001_initial... OK

4. the_10\admin.py加内容

from django.contrib import admin
from the_10.models import Card

# Register your models here.

class CardAdmin(admin.ModelAdmin):
    # fields = ['pub_date','question_text']
    fieldsets = [
        ('日期', {'fields':['user']}),
        ('文本', {'fields': ['msg']}),
    ]
    list_display = ('user','msg')

admin.site.register(Card,CardAdmin)

5. 浏览器打开 站点管理 | Django 站点管理员  

6. 点击 Cards, 增加内容

7. 从数据库中查询出来,the_10\views.py做如下更改

from django.shortcuts import render
from the_10.models import Card

# Create your views here.

def index(request):
    card = Card.objects.select_related().all()
    # l = [
    #     {'msg':'小红,一定要记得好好吃饭哦!', 'username':'python大佬'},
    #     {'msg': 'python大佬,记得明天是项目截止日期!一定要交,不交不准下班!', 'username': 'python大佬的老大'},
    #     {'msg': '还有一个月,就到农历新年了!', 'username': 'python大佬'},
    # ]
    return render(request, "the_10/the_10_index.html",{'cards':card})

8.  templates\the_10\the_10_index.html 把username 改成user.username

{% extends 'the_10/base.html' %}

{% block content %}
    {% for i in cards %}
    <div class="card">
    <div class="msg">
        {{ i.msg }}
    </div>
    <div class="username">
        {{ i.user.username }}
    </div>
</div>
    {% endfor %}

9. 浏览器访问 web便签

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

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

相关文章

普通BUG

IDEA包折叠 如果自动紧凑包名,则有些时候创建新包或类的时候不能达到想要的摆放层级关系,此时右上角搜索按钮搜hide middle,关掉紧凑即可,然后既可以每层一个包不折叠. 效果: 20240105println输出多个参数 int a 10;int b 20;报错println是可以输出多个参数的,但不支持直接用…

Java进阶 1-2 枚举

目录 常量特定方法 职责链模式的枚举实现 状态机模式的枚举实现 多路分发 1、使用枚举类型实现分发 2、使用常量特定方法实现分发 3、使用EnumMap实现分发 4、使用二维数组实现分发 本笔记参考自&#xff1a; 《On Java 中文版》 常量特定方法 在Java中&#xff0c;我们…

软考 软件设计师 查漏补缺

说明建模图 1-1 和图 1-2 是如何保持数据流图平衡。 答&#xff1a;图 1-1 &#xff08;或父图&#xff09;中某加工的输入输出数据流必须与图 1-2 &#xff08;或子图&#xff09;的输入输出数据流在数量和名 字上相同&#xff1b;图 1-1 &#xff08;或父图&#xff09;中的…

智能座舱的下一个价值“爆点”——让“光”更智能

汽车智能化快速升级&#xff0c;智能座舱作为人机交互的主要窗口&#xff0c;交互模态、用户体验也呈现多维度升级。 例如&#xff0c;今年下半年上市的多款高端智能车型纷纷基于高性能座舱硬件平台&#xff0c;集成了AR-HUD、DMS/OMS等高阶功能&#xff0c;同时结合超大屏/多…

新年启新程 | 开门红!菊风中标重庆三峡银行双录及产品销售可回溯系统项目

INTRODUCTION 近年来&#xff0c;随着人们需求的转变和金融科技的高速发展&#xff0c;银行开始朝着数智化方向转型。为顺应客户行为变迁&#xff0c;银行同业积极构建远程银行云服务生态。同时&#xff0c;面对业务的升级以及新的监管要求&#xff0c;现有音视频功能难以满足…

用友U8 Cloud smartweb2.RPC.d SQL注入漏洞

产品介绍 用友U8cloud是用友推出的新一代云ERP&#xff0c;主要聚焦成长型、创新型、集团型企业&#xff0c;提供企业级云ERP整体解决方案。它包含ERP的各项应用&#xff0c;包括iUAP、财务会计、iUFO cloud、供应链与质量管理、人力资源、生产制造、管理会计、资产管理&#…

只有jar包如何调试修改JDK底层源码

背景 有时候在阅读JDK源码的时候&#xff0c;需要调试修改源码&#xff0c;但又只有jar包。这个时候我们可以借助JAVA的endorsed技术。在官方文档如下描述。 Specifying the -Djava.endorsed.dirslib/endorsed system property on the Java command line will force the JVM…

后端中的Dao层、Service层、Impl层、utils层、Controller层

Java Dao层 dao层叫数据访问层&#xff0c;全称为data access object&#xff0c;属于一种比较底层&#xff0c;比较基础的操作&#xff0c;具体到对于某个表、某个实体的增删改查&#xff0c;对外提供稳定访问数据库的方法 Mapper:&#xff08;DAO&#xff09; 访问数据库&am…

22款奔驰GLS450升级香氛负离子 车载香薰

奔驰原厂香氛系统激活原车自带系统&#xff0c;将香气加藏储物盒中&#xff0c;通过系统调节与出风口相结合&#xff0c;再将香味传达至整个车厢&#xff0c;达到净化车厢空气的效果&#xff0c;让整个车厢更加绿色健康&#xff0c;清新淡雅。星骏汇小许Xjh15863 产品功能&…

Linux--系统安全及应用

1.1账号安全控制 用户账号是计算机使用者的身份凭证或标识&#xff0c;每个要访问系统资源的人&#xff0c;必须凭借其用户账号才能进入计算机。在Linux系统中&#xff0c;提供了多种机制来确保用户账号的正当、安全使用。 1.系统账号清理 在Linux系统中&#xff0c;除了用户手…

pod 基础 2

pod 进阶 探针 poststart prestop pod的生命周期开始&#xff1a; 重启&#xff1a;k8s的pod重启策略 deployment的yaml文件只能是Always pod的yaml三种模式都可以。 OnFailure&#xff1a;只有状态码非0才会重启&#xff0c;正常退出是不重启的 Never&#xff1a;正常退…

由浅入深理解C#中的事件

目录 本文较长&#xff0c;给大家提供了目录&#xff0c;可以直接看自己感兴趣的部分。 前言有关事件的概念示例​ 简单示例​ 标准 .NET 事件模式​ 使用泛型版本的标准 .NET 事件模式​ 补充总结 参考前言 前面介绍了C#中的委托&#xff0c;事件的很多部分都与委托…

sqlserver工具插入表语法into新表问题

文章目录 sqlserver工具插入表语法into新表问题 sqlserver工具插入表语法into新表问题 into新表问题 SELECT 1 AS FID, AS FNUMBER,1 AS FVALUE,A AS FVALUE2,名字 AS FNAME, 你的全名 FFULLNAME INTO t_user_mmINSERT INTO t_user_mm VALUES(2,2,2,B,懒人,懒人咖)INSERT I…

FreeRTOS——内存管理知识总结及实战

1 freeRTOS动态创建与静态创建 动态创建&#xff1a;从FreeRTOS 管理的内存堆中申请创建对象所需的内存&#xff0c;在对象删除后&#xff0c; 这块内存释放回FreeRTOS管理的内存堆中 静态创建&#xff1a;需用户提供各种内存空间&#xff0c;并且使用静态方式占用的内存空间一…

VCoder:大语言模型的眼睛

简介 VCoder的一个视觉编码器&#xff0c;能够帮助MLLM更好地理解和分析图像内容。提高模型在识别图像中的对象、理解图像场景方面的能力。它可以帮助模型显示图片中不同物体的轮廓或深度图&#xff08;显示物体距离相机的远近&#xff09;。还能更准确的理解图片中的物体是什…

(Java基础知识综合)

进制转换&#xff1a; 其他转10 10转其他 2进制8和16 8和16转2 位运算&#xff1a; >> 除于2 <<乘以2 近似值 空心金字塔 this关键字还可以用于访问父类中的属性和方法

axios 二次封装 设置token

// 公有 axios.defaults.headers.common[Y-Auth-Token]eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c 设置后 并发起请求&#xff0c;你可以在浏览器控制台…

电脑提示“KBDRU1.DLL文件缺失”,导致游戏和软件无法启动运行,快速修复方法

看到很多小伙伴&#xff0c;在问电脑启动某些软件或游戏的时候&#xff0c;提示“KBDRU1.DLL文件缺失&#xff0c;软件无法启动&#xff0c;请尝试重新安装&#xff0c;解决问题”&#xff0c;不知道应该怎么办&#xff1f; 首先&#xff0c;我们要先了解“KBDRU1.DLL文件”是什…

数据结构学习 jz16 数值的整数次方

关键词&#xff1a;快速幂 位运算 之前已经学过快速幂了&#xff0c;所以只是回忆。快速幂有递归版和非递归版。 题目&#xff1a; 这道题和之前的快速幂的区别是 n可能为负数。分类讨论即可。 思路&#xff1a; 区分正负&#xff1a; if (n < 0) return POW(1.0 / x, …

ASUS华硕ROG幻14笔记本2023款G14 GA402XV原装出厂Win11系统

华硕幻14锐龙R9-7940HS笔记本电脑原厂Windows11.22H2系统 适用型号&#xff1a;GA402XU、GA402XV、GA402XI、GA402XY、GA402XZ 链接&#xff1a;https://pan.baidu.com/s/1sMva1u7D8uFoGnm2Hjrdug?pwdho91 提取码&#xff1a;ho91 原厂系统自带所有驱动、出厂主题壁纸、…