图片及代码均为自我理解,勿喷!!!
从头到尾,建立一个简单的django项目,保姆级教程。
从头创建django项目的脑图,如下:
框架搭建
django版本(2.2):
使用python的pip安装
pip install django==2.2
创建一个django项目(mybbs):
django-admin startproject mybbs
一个django项目自成一个文件夹,如果在该项目再上面套一层目录,可能会出现路径问题
创建应用(bbs)
python manage.py startapp bbs
项目结构如下
数据库、时区、语言等设置(settings.py):
应用配置
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'bbs.apps.BbsConfig' # 默认设置,使用默认数据库
# ‘bbs’ # 使用mysql等数据库,可只写应用名
]
默认数据库设置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'bbs.sqlite3'),
}
}
mysql配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '数据库名',
'USER': '用户名',
'PASSWORD': '用户密码',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
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',
],
},
},
]
时区、语言配置“
LANGUAGE_CODE = 'zh-hans' # 语言
TIME_ZONE = 'Asia/Shanghai' # 地区
USE_I18N = True
USE_L10N = False
USE_TZ = False
static创建
手动创建static文件,setting文件配置以下代码,一般情况static未能引用或报错,多半配置的路径不对
STATIC_URL = '/static/'
STATICFILES_DIRS = ( # static的配置
os.path.join(BASE_DIR, 'static'),
)
模型创建
django模型字段类型
model.py文件内容如下:
from django.db import models
class Topic(models.Model):
title = models.CharField(verbose_name="标题", max_length=100, null=False)
content = models.CharField(verbose_name="内容", max_length=200, null=False)
like_num = models.DecimalField(verbose_name="评分", null=True, max_digits=6, decimal_places=2) # 必须设置整个数字的长度, 小数点后面的有效位数
c_time = models.DateTimeField(verbose_name="创建日期", auto_now_add=True) # 模型创建,自动添加日期
l_time = models.DateTimeField(verbose_name="修改日期", auto_now=True) # 修改日期
class Meta:
verbose_name = "话题"
verbose_name_plural = "话题" # 后台样式
数据迁移
# 生成数据库迁移文件的命令
python manage.py makemigrations
生成迁移表的命令
# python manage.py migrate
创建后台超级用户
python manage.py createsuperuser
使用默认数据库,如果报错,需修改源码debug.py
后台管理
admn.py文件
from django.contrib import admin
from bbs.models import *
@admin.register(Topic)
class TopicAdmin(admin.ModelAdmin):
list_display = ["title", "content", "like_num"] # 显示列表
fields = ("content", "title", "like_num") # 编辑字段
search_fields = ("title", ) # 一个数据,加一个,变为数组类型,不加逗号,默认为字符串
def has_delete_permission(self, request, obj=None): # 去掉删除功能
return False
前台管理
配置模板(settings.py):
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',
],
},
},
]
视图(views.py)
from django.shortcuts import render
from django.views.generic import ListView
from bbs.models import *
# 类视图
class Index(ListView):
model = Topic
template_name = "index.html"
context_object_name = "topic_list" # 前后端交互的字段名
路由(urls.py)
from django.contrib import admin
from django.urls import path
from bbs import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.Index.as_view(), name='index')
]
前台网页
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table border="1">
<tr>
<td>学号</td>
<td>标题</td>
<td>内容</td>
</tr>
{# 从视图传来的数据,遍历展示 #}
{% for i in topic_list %}
<tr>
<td>{{ forloop.counter }}</td>
<td>{{ i.title }}</td>
<td>{{ i.content }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
运行代码
python manage.py runserver
网页结果如下: