Django 20.09

使用MTV 格式进行增删改查找

简单的表单来提交数据

sudo pip3 install -U pip
pip install django==2.2.9
sudo apt update
sudo apt install libmysqlclient-dev
pip install ipython mysqlclient

start project

django-admin startproject myProject
ll
tree myProject

在这里插入图片描述

cd myProject
python3 manage.py startapp myApp

请添加图片描述

配置setting
请添加图片描述

启动

cd myProject
python3 manage.py runserver 0:8080
# myApp/views.py
from django.http import HttpResponseRedirect
from django.urls import reverse

def addBook(request):
    if request.method == 'POST':
        temp_name = request.POST['name']
        temp_author = request.POST['author']
        temp_pub_house = request.POST['pub_house']

    from django.utils import timezone
    temp_book = Book(name=temp_name, author=temp_author, pub_house=temp_pub_house, pub_date=timezone.now())
    temp_book.save()

    # 重定向
    return HttpResponseRedirect(reverse('detail'))

view

model

因为 MyappConfig 类写在文件 myApp/apps.py 中,所以它的路径为 myApp.apps.MyappConfig。

# myApp/models.py
from django.db import models

class Book(models.Model):
    name = models.CharField(max_length=200)
    author = models.CharField(max_length=100)
    pub_house = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

在设置文件中添加路径:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 'myApp', 这一注释掉,不注释掉会因重复而报错
    'myApp.apps.MyappConfig',
]


```bash
python3 manage.py makemigrations myApp
python3 manage.py migrate

在 Django 中,ForeignKeyOneToOneFieldManyToManyField 是用来定义不同类型的数据库关系的模型字段。

以下是这三种关系字段的使用例子:

1. ForeignKey

ForeignKey 用于定义 “一对多” 的关系。例如,一个作者可以写多本书,但是每本书只能有一个作者。在这种情况下,我们可以在 Book 模型中定义一个到 Author 模型的 ForeignKey

class Author(models.Model):
    name = models.CharField(max_length=100)

class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)

on_delete=models.CASCADE 表示,如果关联的 Author 对象被删除,那么所有与之关联的 Book 对象也将被删除。

2. OneToOneField

OneToOneField 用于定义 “一对一” 的关系。例如,一个用户只能有一个用户配置,一个用户配置也只能属于一个用户。在这种情况下,我们可以在 Profile 模型中定义一个到 User 模型的 OneToOneField

from django.contrib.auth.models import User

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    avatar = models.ImageField(upload_to='avatars/')

on_delete=models.CASCADE 表示,如果关联的 User 对象被删除,那么与之关联的 Profile 对象也将被删除。

3. ManyToManyField

ManyToManyField 用于定义 “多对多” 的关系。例如,一本书可以有多个作者,一个作者也可以写多本书。在这种情况下,我们可以在 Book 模型中定义一个到 Author 模型的 ManyToManyField

class Author(models.Model):
    name = models.CharField(max_length=100)

class Book(models.Model):
    title = models.CharField(max_length=200)
    authors = models.ManyToManyField(Author)

在这个例子中,我们可以创建多个 Author 对象并将它们关联到同一本 Book,也可以将同一 Author 关联到多本 Book

这就是 Django 中 ForeignKeyOneToOneFieldManyToManyField 的基本用法。要了解更多信息,你可以参考 Django 官方文档

template

Django 模板语法

Django 的模板系统采用了一种简洁、易理解的语言,允许你在 Python 应用中生成任意格式的文本。下面是 Django 模板中的一些常用语法。

1. 变量

在模板中,你可以使用变量。变量名必须由字母、数字、下划线和点组成,不能包含空格。变量是通过 {{ variable }} 的形式表示的。

<p>My name is {{ name }}.</p>

2. 标签

标签提供了模板的逻辑。标签是通过 {% tag %} 的形式表示的。以下是一些常用的标签:

  • for ... endfor:用于循环。

    <ul>
    {% for item in item_list %}
        <li>{{ item }}</li>
    {% endfor %}
    </ul>
    
  • if ... elif ... else ... endif:用于条件判断。

    {% if user.is_authenticated %}
        <p>Welcome, {{ user.username }}.</p>
    {% else %}
        <p>Please log in.</p>
    {% endif %}
    
  • block ... endblock:用于定义在子模板中可以被覆盖的区块。

    {% block content %}{% endblock %}
    
  • extends:用于表示当前模板是继承于另一模板的。

    {% extends "base.html" %}
    
  • include:用于包含另一个模板的内容。

    {% include "header.html" %}
    
  • csrf_token:用于跨站请求伪造保护。

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

3. 过滤器

过滤器提供了一种在变量被显示之前修改它的方式。过滤器是通过 {{ variable|filter }} 的形式表示的。例如,你可以使用 date 过滤器来格式化日期。

<p>The date is {{ today|date:"F j, Y" }}.</p>

(https://docs.djangoproject.com/en/stable/topics/templates/)。

接续之前的介绍,我们可以进一步了解 Django 模板的一些更深层次的概念和用法。

1. 模板继承

Django 的模板系统支持模板继承,这是避免重复的强大工具。你可以创建一个基础模板(base template),然后定义一些可以被子模板覆盖的块(block)。子模板可以继承这个基础模板,并且可以覆盖这些块。

例如,创建一个基础模板 base.html

<!DOCTYPE html>
<html>
<head>
    <title>{% block title %}Default Title{% endblock %}</title>
</head>
<body>
    <div id="content">
        {% block content %}{% endblock %}
    </div>
</body>
</html>

然后,创建一个继承自 base.html 的模板 my_page.html

{% extends "base.html" %}

{% block title %}My Page{% endblock %}

{% block content %}
    <h1>Welcome to my page!</h1>
{% endblock %}

2. 使用变量

在模板中,你可以访问传递给模板的任何变量。比如,如果你在视图函数中传递了一个名为 article 的变量,你可以在模板中直接使用 {{ article.title }} 访问文章的标题。

def article_view(request):
    article = Article.objects.get(id=1)
    return render(request, 'article.html', {'article': article})

然后,在 article.html 模板中:

<h1>{{ article.title }}</h1>
<p>{{ article.content }}</p>

3. 自定义过滤器和标签

虽然 Django 提供了许多内置的过滤器和标签,但有时候你可能会需要创建自定义的过滤器和标签。你可以在一个 Python 模块中定义这些过滤器和标签,然后在模板中使用 {% load %} 标签来加载它们。

例如,定义一个自定义过滤器 lower

from django import template

register = template.Library()

@register.filter
def lower(value):
    return value.lower()

然后,在模板中使用它:

{{ "HELLO"|lower }}

以上就是 Django 模板的一些更深层次的概念和用法。我希望这些信息对你有所帮助。如果你想了解更多,我建议你阅读 Django 的官方文档,那里有更详细的信息。

post

request.POST 是一个类字典对象,可以通过关键字的名字获取提交的数据。

redirection

HttpResponseRedirect 而不是常用的 HttpResponse,HttpResponseRedirect 只接收一个参数:用户将要被重定向的 URL。

reverse

reverse() 函数。这个函数避免了我们在视图函数中硬编码 URL

html

HTML (HyperText Markup Language) 是用来构建网页的标准标记语言。HTML 使用标记(tags)告诉浏览器如何呈现文本和图像。让我们开始学习吧!

HTML 文档结构

一个基本的 HTML 文档结构看起来像这样:

<!DOCTYPE html>
<html>
  <head>
    <title>页面标题</title>
  </head>
  <body>
    <h1>我的第一个标题</h1>
    <p>我的第一个段落。</p>
  </body>
</html>

让我们来解析一下这个文档:

  • <!DOCTYPE html> 告诉浏览器这个是 HTML5 文档。
  • <html> 元素是整个 HTML 页面的根元素。
  • <head> 元素包含了所有的元信息,如标题、链接到 CSS 文件、字符编码声明等。
  • <title> 元素描述了页面的标题,这个标题会显示在浏览器的标题栏或标签页上。
  • <body> 元素包含了所有页面的可见内容,如标题、段落、图片、链接等。
  • <h1> 定义了一个大标题。HTML 提供 <h1><h6> 六个等级的标题。
  • <p> 定义了一个段落。

HTML 标签

HTML 使用标签来标记内容。一个标签通常包括开始标签和结束标签,例如 <p></p>。以下是一些常见的 HTML 标签:

  • <h1><h6>: 定义标题。<h1> 是最大的标题,<h6> 是最小的标题。
  • <p>: 定义段落。
  • <a>: 定义超链接。
  • <img>: 定义图像。
  • <ul><li>: 定义无序列表。
  • <ol><li>: 定义有序列表。
  • <table>, <tr>, <th>, <td>: 用来定义表格。

HTML 属性

HTML 标签可以有属性,属性提供了关于元素的更多信息。例如,<a> 标签的 href 属性定义了链接的地址:

<a href="https://www.example.com">这是一个链接</a>

练习

创建一个简单的 HTML 页面,包含一个标题、一个段落和一个链接,如下:

<!DOCTYPE html>
<html>
<head>
  <title>我的页面</title>
</head>
<body>
  <h1>欢迎来到我的页面!</h1>
  <p>这是一个简单的HTML页面。</p>
  <a href="https://www.example.com">点击这里</a> 访问example.com.
</body>
</html>

当然,让我们继续深入了解 HTML。

HTML 列表

HTML 提供了有序列表和无序列表的元素:

  • 无序列表 使用 <ul> 标签,列表项使用 <li> 标签:

    <ul>
      <li>咖啡</li>
      <li></li>
      <li>牛奶</li>
    </ul>
    ```
    
    
  • 有序列表 使用 <ol> 标签,列表项仍然使用 <li> 标签:

    <ol>
      <li>咖啡</li>
      <li></li>
      <li>牛奶</li>
    </ol>
    ```
    
    

HTML 图片

HTML 使用 <img> 标签插入图片。图片的地址在 src 属性中指定,alt 属性用于提供备用的文本描述:

<img src="coffee.jpg" alt="一杯咖啡的图片">

HTML 链接

HTML 使用 <a> 标签定义链接,链接的地址在 href 属性中指定:

<a href="https://www.example.com">访问 Example.com</a>

HTML 表格

HTML 使用 <table> 标签创建表格,<tr> 定义行,<th> 定义表头,<td> 定义单元格:

<table>
  <tr>
    <th>姓名</th>
    <th>电子邮件</th>
  </tr>
  <tr>
    <td>张三</td>
    <td>zhangsan@example.com</td>
  </tr>
</table>

HTML 表单

HTML 表单用于收集用户输入。表单使用 <form> 标签,输入字段使用 <input> 标签,提交按钮使用 <button> 标签:

<form>
  <label for="fname">名字:</label><br>
  <input type="text" id="fname" name="fname"><br>
  <button type="submit">提交</button>
</form>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘亿妃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值