Django 具有出色的内置用户模型和身份验证支持。这是大多数开发人员更喜欢 Django 而不是 Flask、FastAPI、AIOHttp 和许多其他框架的主要原因。但有时我们对用户模型不满意,或者我们想根据项目需求进行定制。假设我们不再需要用户名字段。或者我们想使用用户的电子邮件而不是默认的用户名。为此,我们需要自定义默认的Django 用户模型。在本教程中,我们将从头开始构建用户模型。您应该记住的一件事是自定义 Django 默认值会增加复杂系统的复杂性。因此,请尝试坚持使用默认的用户模型。但针对项目需求,我们可以进行默认的更改。

- 阅读剩余部分 -

在本教程中,我们将完整讨论 Django ORM 查询以及如何使用它们来操作数据。Django ORM 是 Django 最好的工具之一,在执行数据库相关任务中发挥着非常重要的作用。它以一种与数据库无关的方式提供数据库的抽象。Django ORM 由易用性抽象组成。它让“简单的事情变得容易,困难的事情成为可能”。在这里,我们将详细解释每个 ORM 查询,并查看它们关联的 SQL 查询。

- 阅读剩余部分 -

图像上传是任何现代网络应用程序的主要功能之一。它允许用户将图像或图片上传到服务器上。幸运的是,Django 提供了处理图像的简单过程,特别是上传图像或图片。使用它,我们可以创建一个漂亮的 Web 应用程序,用户可以在其中上传带有标题的图像。在本教程中,我们将讨论如何在 Django 应用程序中上传图像。在我们进一步讨论之前,请确保您具备 Django 的基本知识。

- 阅读剩余部分 -

Django 带有内置的用户身份验证系统。此配置执行最常见的项目需求,处理各种任务以及有效的密码和权限。我们可以通过导入用户认证模块来创建用户登录。本文将讨论用于创建新用户的UserCreationForm 。它是一个继承自ModelForm类的内置模块。在学习Django UserCreationForm之前,我们先简单介绍一下User。什么是用户对象?用户对象是用户认证系统的主要组成部分。它们被表示为网站访问者,用于实现阻止访问、注册用户配置文件、将内容与创建者相关联等功能。但是“超级用户”和“管理员”类用户对象提供了特殊属性。

- 阅读剩余部分 -

Django 是最流行的 Python Web 框架,用于快速 Web 应用程序开发。它提供了一个内置界面,可以轻松使用它。它也被称为包含电池的框架,因为它为每个操作提供内置设施。我们大多数人可能已经熟悉基于函数的视图,并且知道如何使用基于函数的视图处理请求。在本教程中,我们将介绍基于类的通用视图。这些是一组高级内置视图,用于实现选择性 CRUD(创建、检索、更新和删除)操作。使用基于类的视图,我们可以轻松处理视图的 GET、POST 请求。

- 阅读剩余部分 -

Django 提供了许多优点和功能,更改数据库是其最大的好处之一。Django框架可以毫不费力地处理后端进程。Django 模型可以非常灵活地轻松执行创建、删除和更新等过程。在本教程中,我们有 Django on_delete参数的完整指南。on_delete 是有助于高效执行数据库相关任务的参数之一。在 Django 中建立关系时使用此参数。on_delete 参数允许我们使用外键。显然,每当出现外键概念时,都希望将on_delete参数声明为外键中的参数之一。该参数决定是否必须进行删除。它告诉删除父值时要做什么。该选项为面向数据库的操作提供了一定程度的灵活性。

- 阅读剩余部分 -

在本教程中,我们将介绍 Django 的重要概念之一:重定向。我们将了解 Django 重定向及其用途。我们还将看到重定向的示例,并将讨论永久和临时重定向。我们假设您已经熟悉 Django 的基本构建概念,例如视图、模型和 URL 模式。什么是重定向?当我们使用 Django 框架创建 Web 应用程序时,我们有时会需要从一个 URL 访问另一个 URL。通过从 django 中的视图返回HttpResponseRedirect或HttpResponseRedirect的实例,我们可以轻松地从当前 URL 跳转到另一个 URL 。我们需要使用view.py文件中的django.shortcuts模块导入重定向函数。让我们看下面的例子。

- 阅读剩余部分 -

要创建执行 CRUD 操作的 Django 应用程序,请按照以下步骤操作。

1. 创建项目

$ django-admin startproject crudexample  

1.png

2. 创建一个应用程序

$ python3 manage.py startapp employee  

2.png

三、项目结构

最初,我们的项目如下所示:

3.png

4. 数据库设置

在mysql中创建数据库djangodb,并配置到django项目的settings.py文件中。请参阅示例。

// 设置.py

DATABASES = {  
    'default': {  
        'ENGINE': 'django.db.backends.mysql',  
        'NAME': 'djangodb',  
        'USER':'root',  
        'PASSWORD':'mysql',  
        'HOST':'localhost',  
        'PORT':'3306'  
    }  
}  

5. 创建模型

将以下代码放入models.py文件中。

// 模型.py

from django.db import models  
class Employee(models.Model):  
    eid = models.CharField(max_length=20)  
    ename = models.CharField(max_length=100)  
    eemail = models.EmailField()  
    econtact = models.CharField(max_length=15)  
    class Meta:  
        db_table = "employee"  

6. 创建模型表单

// 表单.py

from django import forms  
from employee.models import Employee  
class EmployeeForm(forms.ModelForm):  
    class Meta:  
        model = Employee  
        fields = "__all__"  

7. 创建视图函数

// 视图.py

from django.shortcuts import render, redirect  
from employee.forms import EmployeeForm  
from employee.models import Employee  
# Create your views here.  
def emp(request):  
    if request.method == "POST":  
        form = EmployeeForm(request.POST)  
        if form.is_valid():  
            try:  
                form.save()  
                return redirect('/show')  
            except:  
                pass  
    else:  
        form = EmployeeForm()  
    return render(request,'index.html',{'form':form})  
def show(request):  
    employees = Employee.objects.all()  
    return render(request,"show.html",{'employees':employees})  
def edit(request, id):  
    employee = Employee.objects.get(id=id)  
    return render(request,'edit.html', {'employee':employee})  
def update(request, id):  
    employee = Employee.objects.get(id=id)  
    form = EmployeeForm(request.POST, instance = employee)  
    if form.is_valid():  
        form.save()  
        return redirect("/show")  
    return render(request, 'edit.html', {'employee': employee})  
def destroy(request, id):  
    employee = Employee.objects.get(id=id)  
    employee.delete()  
    return redirect("/show")  

8. 提供路由

提供 URL 模式以与视图功能进行映射。

// url.py

from django.contrib import admin  
from django.urls import path  
from employee import views  
urlpatterns = [  
    path('admin/', admin.site.urls),  
    path('emp', views.emp),  
    path('show',views.show),  
    path('edit/<int:id>', views.edit),  
    path('update/<int:id>', views.update),  
    path('delete/<int:id>', views.destroy),  
]  

9. 组织模板

在员工应用程序中创建一个templates文件夹,并在该目录中创建三个(索引、编辑、显示)html 文件。下面给出了每个的代码。

// 索引.html

<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <title>Index</title>  
    {% load staticfiles %}  
    <link rel="stylesheet" href="{% static 'css/style.css' %}"/>  
</head>  
<body>  
<form method="POST" class="post-form" action="/emp">  
        {% csrf_token %}  
    <div class="container">  
<br>  
    <div class="form-group row">  
    <label class="col-sm-1 col-form-label"></label>  
    <div class="col-sm-4">  
    <h3>Enter Details</h3>  
    </div>  
  </div>  
    <div class="form-group row">  
    <label class="col-sm-2 col-form-label">Employee Id:</label>  
    <div class="col-sm-4">  
      {{ form.eid }}  
    </div>  
  </div>  
  <div class="form-group row">  
    <label class="col-sm-2 col-form-label">Employee Name:</label>  
    <div class="col-sm-4">  
      {{ form.ename }}  
    </div>  
  </div>  
    <div class="form-group row">  
    <label class="col-sm-2 col-form-label">Employee Email:</label>  
    <div class="col-sm-4">  
      {{ form.eemail }}  
    </div>  
  </div>  
    <div class="form-group row">  
    <label class="col-sm-2 col-form-label">Employee Contact:</label>  
    <div class="col-sm-4">  
      {{ form.econtact }}  
    </div>  
  </div>  
    <div class="form-group row">  
    <label class="col-sm-1 col-form-label"></label>  
    <div class="col-sm-4">  
    <button type="submit" class="btn btn-primary">Submit</button>  
    </div>  
  </div>  
    </div>  
</form>  
</body>  
</html>  

// 显示.html

<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <title>Employee Records</title>  
     {% load staticfiles %}  
    <link rel="stylesheet" href="{% static 'css/style.css' %}"/>  
</head>  
<body>  
<table class="table table-striped table-bordered table-sm">  
    <thead class="thead-dark">  
    <tr>  
        <th>Employee ID</th>  
        <th>Employee Name</th>  
        <th>Employee Email</th>  
        <th>Employee Contact</th>  
        <th>Actions</th>  
    </tr>  
    </thead>  
    <tbody>  
{% for employee in employees %}  
    <tr>  
        <td>{{ employee.eid }}</td>  
        <td>{{ employee.ename }}</td>  
        <td>{{ employee.eemail }}</td>  
        <td>{{ employee.econtact }}</td>  
        <td>  
            <a href="/edit/{{ employee.id }}"><span class="glyphicon glyphicon-pencil" >Edit</span></a>  
            <a href="/delete/{{ employee.id }}">Delete</a>  
        </td>  
    </tr>  
{% endfor %}  
    </tbody>  
</table>  
<br>  
<br>  
<center><a href="/emp" class="btn btn-primary">Add New Record</a></center>  
</body>  
</html>  

// 编辑.html

<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <title>Index</title>  
    {% load staticfiles %}  
    <link rel="stylesheet" href="{% static 'css/style.css' %}"/>  
</head>  
<body>  
<form method="POST" class="post-form" action="/update/{{employee.id}}">  
        {% csrf_token %}  
    <div class="container">  
<br>  
    <div class="form-group row">  
    <label class="col-sm-1 col-form-label"></label>  
    <div class="col-sm-4">  
    <h3>Update Details</h3>  
    </div>  
  </div>  
    <div class="form-group row">  
    <label class="col-sm-2 col-form-label">Employee Id:</label>  
    <div class="col-sm-4">  
        <input type="text" name="eid" id="id_eid" required maxlength="20" value="{{ employee.eid }}"/>  
    </div>  
  </div>  
  <div class="form-group row">  
    <label class="col-sm-2 col-form-label">Employee Name:</label>  
    <div class="col-sm-4">  
        <input type="text" name="ename" id="id_ename" required maxlength="100" value="{{ employee.ename }}" />  
    </div>  
  </div>  
    <div class="form-group row">  
    <label class="col-sm-2 col-form-label">Employee Email:</label>  
    <div class="col-sm-4">  
        <input type="email" name="eemail" id="id_eemail" required maxlength="254" value="{{ employee.eemail }}" />  
    </div>  
  </div>  
    <div class="form-group row">  
    <label class="col-sm-2 col-form-label">Employee Contact:</label>  
    <div class="col-sm-4">  
        <input type="text" name="econtact" id="id_econtact" required maxlength="15" value="{{ employee.econtact }}" />  
    </div>  
  </div>  
    <div class="form-group row">  
    <label class="col-sm-1 col-form-label"></label>  
    <div class="col-sm-4">  
    <button type="submit" class="btn btn-success">Update</button>  
    </div>  
  </div>  
    </div>  
</form>  
</body>  
</html>  

10. 静态文件处理

员工应用程序中创建一个static/css文件夹,并将 css 放入其中。

11. 项目结构

4.png

12. 创建迁移

为创建的模型员工创建迁移,使用以下命令。

$ python3 manage.py makemigrations  

5.png

迁移后,再执行一项命令以将迁移反映到数据库中。但在此之前,请在 settings.py 文件的 INSTALLED_APPS 中提及应用程序(员工)的名称。

// 设置.py

INSTALLED_APPS = [  
    'django.contrib.admin',  
    'django.contrib.auth',  
    'django.contrib.contenttypes',  
    'django.contrib.sessions',  
    'django.contrib.messages',  
    'django.contrib.staticfiles',  
    'employee'  
]  

运行命令来迁移迁移。

$ python3 manage.py migrate  

6.png

现在,我们的应用程序已成功连接并在数据库中创建了表。它创建 10 个用于处理项目(会话、身份验证等)的默认表以及我们创建的模型的一张表。

请参阅迁移命令后创建的表列表。

7.png

运行服务器

要运行服务器,请使用以下命令。

$ python3 manage.py runserver  

8.png

访问浏览器

输入localhost:8000/show访问该应用程序,它将显示所有可用的员工记录。

最初,没有记录。所以,它显示没有记录消息。

9.png

添加记录

单击添加新记录按钮并填写详细信息。请参阅示例。

10.png

填写详细信息。

11.png

提交记录看看,提交后显示已保存的记录。

12.png

此部分还允许更新和删除操作列中的记录。

保存几条记录后,现在我们有以下记录。

13.png

更新记录

让我们通过单击编辑按钮来更新Mohan的记录。编辑模式下会显示Mohan的记录。

14.png

让我们假设我将mohan更新为mohan kumar,然后单击更新按钮。它立即更新记录。请参阅示例。

15.png

单击更新按钮,它会重定向到以下页面。查看名称已更新。

16.png

同样,我们也可以通过单击删除链接来删除记录。

删除记录

假设,我想删除Sohan,只需单击删除按钮即可轻松完成。请参阅示例。

17.png

删除后,我们留下了以下记录。

18.png

好了,我们已经使用 Django 成功创建了一个 CRUD 应用程序。

Django 提供了一个管理后台,允许对注册的应用程序模型进行 CRUD(创建、读取、更新、删除)操作。它是 Django 的内置功能,可以自动生成模型的接口。我们可以在 urls.py 文件中看到 admin 的 url 条目,它是隐式的,在创建新项目时生成。

- 阅读剩余部分 -

使用 Django 发送电子邮件非常简单,并且需要较少的配置。在本教程中,我们将向提供的电子邮件发送电子邮件。为此,我们将使用Google的SMTP和Gmail帐户来设置发件人。Django 提供内置邮件库django.core.mail来发送电子邮件。

- 阅读剩余部分 -