文章目录
前言
给以后的自己看,Django前后端的知识,学习后将其归纳总和起来一、创建Django项目的命令
django-admin startproject aolongs
创建一个django项目,在项目名称后面空格并加上‘.’可以在单层目录下创建项目,这样不会有路径问题
django-admin startapp aoapp
创建一个项目app,主要是为了存储数据库,和一些前后端模板的
创建之后需要在项目的setting.py文件INSTALLED_APPS中添加app的名字
二、连接数据库和连接前端
1.将数据库的配置文件在setting.py中替换
代码如下(示例):
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '数据库名',
'HOST':'127.0.0.1',
'POST':3306,
'USER':'root',
'PASSWORD':'密码',
}
}
2.前端模板配置
如刚开始的创建结构文件目录一样将templates文件夹创建好,也可以创建到app文件夹里,但是可能会出一些路径问题,并且一旦出现很难解决,移出可以解决。
创建之后在setting.py中的TEMPLATES
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')] #配置当前的路径
,
'APP_DIRS': True,#从当前app目录下找,false从根目录找
'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',
],
},
},
]
数据库还需要在项目框架里添加代码
# 在与 settings.py 同级目录下的 __init__.py 中引入模块和进行配置
import pymysql
pymysql.install_as_MySQLdb()
一般在templates中创建文件夹以当前的app为名,便于管理当前app的html文件,创建简单的index.html输出helloworld.
#在app文件夹中的views.py中写入连接前后端的方法,使用render连接
# Create your views here.
def homepage(request):
return render(request, 'aoapp/index.html')
在views.py中写连接的方法后,将访问的url也配置好就可以访问了,默认的urls.py在项目文件夹中,如果有多个app相对来说是不太方便的,但是结果还是能实现。
from django.contrib import admin
from django.urls import path, include
from aoapp.views import homepage
urlpatterns = [
path('admin/', admin.site.urls),
path('',homepage)
]
比较好的方法是在当前app中也创建urls.py,用来配置当前app相关的网址路径。
在主项目中引用当前app中的urls.py
from django.contrib import admin
from django.urls import path, include
from aoapp.views import homepage
urlpatterns = [
path('admin/', admin.site.urls),
path('',include("aoapp.urls"))
]
在app文件夹中创建相应的urls.py
from django.urls import path
from aoapp.views import homepage
urlpatterns = [
path('',homepage),
]
最后在命令行中使用python manage.py runserver就可以运行了。
三、数据库操作
数据库的操作主要是在models.py中创建,views.py中执行其他ORM的操作。
ORM:对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。
自己理解:Django针对于数据库做的一种映射,即不使用原生的sql语句,将所有数据库的写法都归并为Django自己的写法。
1.创建数据库
思想:创建三个表,顾客,产品和订单,顾客通过在订单中选购产品,所以顾客和产品需要和订单表建立主外键的简单关系
from django.db import models
# Create your models here.
class Customer(models.Model):
name = models.CharField(max_length=30)
phone = models.CharField(max_length=30)
email = models.EmailField()
time_created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
class Product(models.Model):
#用于页面上的选择框标签,需要先提供一个二维的二元元组,
# 第一个元素表示存在数据库内真实的值,第二个表示页面上显示的具体内容。在浏览器页面上将显示第二个元素的值
CATEGORY = (
('Indoor', 'Indoor'),
('Outdoor', 'Outdoor'),
)
name = models.CharField(max_length=30)
price = models.CharField(max_length=30)
category = models.CharField(max_length=30, choices=CATEGORY)#可以提供选择框选项
description = models.TextField(blank=True, null=True)
#blank用于表单的认证,被设为blank=False(默认为False)的字段在填写表单时不能为空。
#null用于规定数据库中的列的非空性,被设为null=False(默认为False)的字段在数据库中对应的列不能为空
# (用SQL来说明就是为该列添加了NOT NULL的约束)。
def __str__(self):
return self.name
class Order(models.Model):
STATUS = (
('Pending', ' Pending '),
('out for delivery', 'out for delivery'),
('Delivered', 'Delivered')
)
#添加外键约束,和前面两个表联系起来,设置级联(即父表删除,子表删除), related_name约束名
customer = models.ForeignKey(Customer, on_delete=models.CASCADE, related_name='c_order')
product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='p_order')
time_created = models.DateTimeField(auto_now_add=True)
status = models.CharField(max_length=30, choices=STATUS)
2.数据表迁移,创建表并映射到数据库中的命令
python manage.py migrate
python manage.py makemigrations #(主要是相当于更新models的内容并绑定数据库)
绑定后,就会在app文件夹里的migrations文件夹中生成文件,那0001_initial.py文件里的就是用来创建的标准映射代码,给我们默认每个表里面添加了主键id
python manage.py migrate #相当于执行生成的py文件,创建表
上述问题是因为已经创建过表然后删除了再试的,因为创建数据库表的时候其实Django会创建很多相应的表,有相应的记录在其中,所以需要删除django_migrations表中的记录
再执行命令python manage.py migrate即可在数据库中创建表
3.配置后台管理
配置时区
在setting.py中修改
LANGUAGE_CODE = ‘zh-hans’
TIME_ZONE = ‘Asia/Shanghai’
创建超级管理员
命令行中输入,并在提示后创建用户名,邮箱,密码等
python manage.py createsuperuser