目录
Django 3功能
先决条件
Django 3教程,第1步——创建MySQL数据库
Django 3教程,第2步——初始化新的虚拟环境
Django 3教程,第3步——安装Django和MySQL客户端
Django 3教程,第4步——初始化新项目
Django 3教程,第5步——安装django-widget-tweaks
Django 3教程,第6步——创建管理员用户
Django 3教程,第7步——创建Django应用程序
Django 3教程,第8步——创建模型
Django 3教程,第9步——创建表单
Django 3教程,第10步——创建视图
Django 3教程,第11步——创建模板
Django 3教程,第12步——创建URL
Django 3教程,第13步——运行本地开发服务器
结论
Django 3已发布,具有完全异步支持!在本教程中,我们将通过示例逐步演示如何创建CRUD应用程序。我们将看到如何配置MySQL数据库,启用管理界面以及创建django视图。
我们将使用Bootstrap 4进行样式设置。
您将学习如何:
- 实现CRUD操作
- 配置和访问MySQL数据库
- 创建Django视图,模板和URL
- 使用Bootstrap 4设置UI样式
Django 3具有许多新功能,例如:
- MariaDB支持:Django现在正式支持MariaDB 10.1+。您可以通过MySQL后端使用MariaDB
- ASGI支持异步编程
- Django 3.0提供了对作为ASGI应用程序运行的支持,从而使Django完全具有异步功能
- PostgreSQL上的排除约束:Django 3.0添加了一个新ExclusionConstraint类,该类在PostgreSQL等上添加了排除约束。
让我们从本教程的先决条件开始。为了逐步按照本教程进行操作,您需要满足一些要求,例如:
- Python基础知识
- Django的工作知识(django-admin.py和manage.py)
- 您的系统上安装了Python 3的最新版本(最新版本是3.7)
- 系统上已安装MySQL数据库
我们将使用pip和venv,它们作为模块捆绑在最新版本的Python中,因此除非您正在使用旧版本,否则实际上不需要安装它们。
如果您准备好了,那就开始吧!
Django 3教程,第1步——创建MySQL数据库在这一步中,我们将创建一个mysql数据库来存储我们的应用程序数据。
打开一个新的命令行界面,并如下运行mysql客户端:
$ mysql -u root -p
系统将提示您输入MySQL密码,输入密码,然后按Enter键。
接下来,使用以下SQL语句创建数据库:
mysql> create database mydb;
我们现在有一个空的mysql数据库!
在这一步中,我们将初始化一个新的虚拟环境,以分离系统范围的软件包来安装我们的项目软件包。
回到您的命令行界面并运行以下命令:
$ python3 -m venv .env
接下来,使用以下命令激活您的虚拟环境:
$ source .env/bin/activate
在本教程的这一点上,我们有一个用于保存数据的mysql数据库,并创建了一个用于安装项目包的虚拟环境。
在此步骤中,我们将在激活的虚拟环境中使用pip从PyPI安装django和mysql客户端。
回到您的命令行界面并运行以下命令来安装django软件包:
$ pip install django
在撰写本教程时,已安装django-3.0.2。
您还需要使用pip命令为Python安装mysql客户端:
$ pip install mysqlclient
Django 3教程,第4步——初始化新项目
在这一步中,我们将使用django-admin初始化一个新的django项目。
回到您的命令行界面并运行以下命令:
$ django-admin startproject djangoCrudExample
接下来,打开settings.py文件并更新数据库设置以配置mydb数据库:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydb',
'USER': 'root',
'PASSWORD': '',
'HOST': 'localhost',
'PORT': '3306',
}
}
接下来,使用以下命令迁移数据库:
$ cd djangoCrudExample
$ python3 manage.py migrate
您将获得类似的输出:
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying sessions.0001_initial... OK
这只是应用了一组内置的django迁移来创建一些必要的数据库表或django的工作。
在此步骤中,我们将在虚拟环境中安装django-widget-tweaks。回到您的命令行界面并运行以下命令:
$ pip insll django-widget-tweaks
接下来,打开settings.py文件,然后将应用程序添加到已安装的应用程序中:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'widget_tweaks'
]
Django 3教程,第6步——创建管理员用户
在此步骤中,我们将创建一个管理员用户,该用户将允许我们使用以下命令访问应用程序的管理界面:
$ python manage.py createsuperuser
在提示时提供所需的用户名,电子邮件和密码:
Username (leave blank to use 'ahmed'):
Email address: ahmed@gmail.com
Password:
Password (again):
Superuser created successfully.
Django 3教程,第7步——创建Django应用程序
在这一步中,我们将创建一个django应用程序。
回到您的命令行界面,并运行以下命令:
$ python manage.py startapp crudapp
接下来,您需要将其添加到settings.py文件中,如下所示:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'widget_tweaks',
'crudapp'
]
Django 3教程,第8步——创建模型
在此步骤中,我们将创建用于存储联系人的数据库模型。
打开crudapp/models.py文件并添加以下代码:
from django.db import models
class Contact(models.Model):
firstName = models.CharField("First name", max_length=255, blank = True, null = True)
lastName = models.CharField("Last name", max_length=255, blank = True, null = True)
email = models.EmailField()
phone = models.CharField(max_length=20, blank = True, null = True)
address = models.TextField(blank=True, null=True)
description = models.TextField(blank=True, null=True)
createdAt = models.DateTimeField("Created At", auto_now_add=True)
def __str__(self):
return self.firstName
创建这些模型后,您需要使用以下命令创建迁移:
$ python manage.py makemigrations
您应该得到类似的输出:
crudapp/migrations/0001_initial.py
- Create model Contact
接下来,您需要使用以下命令迁移数据库:
$ python manage.py migrate
您应该得到类似的输出:
Applying crudapp.0001_initial... OK
Django 3教程,第9步——创建表单
在此步骤中,我们将创建一个用于创建联系人的表单。
在crudapp文件夹中,创建一个forms.py文件并添加以下代码:
from django import forms
from .models import Contact
class ContactForm(forms.ModelForm):
class Meta:
model = Contact
fields = "__all__"
我们从models.py文件导入Contact模型。我们创建了一个名为ContactForm的类,从django.forms包中继承了Django的ModelForm,并指定了我们要使用的模型。我们还指定将使用Contact模型中的所有字段。这将使我们能够在模板中显示这些字段。
在此步骤中,我们将创建用于执行CRUD操作的视图。
打开crudapp/views.py文件并添加:
from django.shortcuts import render, redirect, get_object_or_404
from .models import Contact
from .forms import ContactForm
from django.views.generic import ListView, DetailView
接下来,添加:
class IndexView(ListView):
template_name = 'crudapp/index.html'
context_object_name = 'contact_list'
def get_queryset(self):
return Contact.objects.all()
class ContactDetailView(DetailView):
model = Contact
template_name = 'crudapp/contact-detail.html'
接下来,添加:
def create(request):
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
form.save()
return redirect('index')
form = ContactForm()
return render(request,'crudapp/create.html',{'form': form})
def edit(request, pk, template_name='crudapp/edit.html'):
contact = get_object_or_404(Contact, pk=pk)
form = ContactForm(request.POST or None, instance=post)
if form.is_valid():
form.save()
return redirect('index')
return render(request, template_name, {'form':form})
def delete(request, pk, template_name='crudapp/confirm_delete.html'):
contact = get_object_or_404(Contact, pk=pk)
if request.method=='POST':
contact.delete()
return redirect('index')
return render(request, template_name, {'object':contact})
Django 3教程,第11步——创建模板
打开settings.py文件并添加os.path.join(BASE_DIR, 'templates')到TEMPLATES数组中:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
这将告诉django在模板文件夹中查找模板。
接下来,在crudapp文件夹中,创建一个模板文件夹:
$ mkdir templates
接下来,在模板文件夹中,创建以下文件:
- base.html
- Confirm_delete.html
- edit.html
- index.html
- create.html
- contact-detail.html
通过从项目的根目录运行以下命令:
$ mkdir templates
$ cd templates
$ mkdir crudapp
$ touch crudapp/base.html
$ touch crudapp/confirm_delete.html
$ touch crudapp/edit.html
$ touch crudapp/index.html
$ touch crudapp/create.html
$ touch crudapp/contact-detail.html
打开crudapp/templates/base.html文件,然后添加:
Django 3 CRUD Example
{% block content %}
{% endblock %}
接下来,打开crudapp/templates/index.html文件,然后添加:
{% extends 'crudapp/base.html' %}
{% block content %}
Contacts
{% for contact in contact_list %}
-
{{ contact.firstName }}
{{contact.lastName}}
{% endfor %}
{% endblock %}
接下来,打开crudapp/templates/create.html文件,然后添加:
{% load widget_tweaks %}
Posts
All fields are required
{% csrf_token %}
{% for hidden_field in form.hidden_fields %}
{{ hidden_field }}
{% endfor %}
{% for field in form.visible_fields %}
{{ field.label_tag }}
{% render_field field class="form-control" %}
{% if field.help_text %}
{{ field.help_text }}
{% endif %}
{% endfor %}
post
接下来,打开crudapp/templates/edit.html文件,然后添加:
{% load widget_tweaks %}
Edit Contact
All fields are required
{% csrf_token %}
{% for hidden_field in form.hidden_fields %}
{{ hidden_field }}
{% endfor %}
{% for field in form.visible_fields %}
{{ field.label_tag }}
{% render_field field class="form-control" %}
{% if field.help_text %}
{{ field.help_text }}
{% endif %}
{% endfor %}
submit
接下来,打开 crudapp/templates/confirm_delete.html文件,然后添加:
{% extends 'crudapp/base.html' %}
{% block content %}
{% csrf_token %}
Are you sure you want to delete {{ object }}?
{% endblock %}
Django 3教程,第12步——创建URL
在这一步中,我们将创建URL来访问我们的CRUD视图。
转到urls.py文件,并按如下所示进行更新:
from django.contrib import admin
from django.urls import path
from crudapp import views
urlpatterns = [
path('admin/', admin.site.urls),
path('contacts/', views.IndexView.as_view(), name='index'),
path('contacts//', views.ContactDetailView.as_view(), name='detail'),
path('contacts/edit//', views.edit, name='edit'),
path('contacts/create/', views.create, name='create'),
path('contacts/delete//', views.delete, name='delete'),
]
Django 3教程,第13步——运行本地开发服务器
在此步骤中,我们将运行本地开发服务器来运行我们的应用程序,而无需将其部署到网络上。
回到您的命令行界面并运行以下命令:
$ python manage.py runserver
接下来,使用网络浏览器转到http://localhost:8000/地址。
在本Django 3教程中,我们初始化了一个新的Django项目,创建并迁移了MySQL数据库,并构建了一个简单的CRUD界面。