1. 构建激活虚拟环境 py36_django
activate py36_django
2. 新建项目
G:
cd <dir>
django-admin startproject <name>
#数据库迁徙
cd <project_path>
python manage.py migrate
#后台设置
python manage.py createsuperuser
Username (leave blank to use 'cx'): cx
Email address:
Password:
Password (again):
Superuser created successfully.
3. 新建应用app
python manage.py startapp <appname>

proj-lab 整体项目文件夹
proj-lab 项目文件夹
s2aclab 应用文件夹
3.1 项目settings.py 设置
INSTALLED_APPS = [ ‘django.contrib.admin’,
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
**'s2aclab', # 对新建的app进行注册**
] LANGUAGE_CODE = ‘zh-Hans’ 设定后台中文 以及 时区 TIME_ZONE = ‘Asia/Shanghai’
3.2 app/models.py
#coding=gbk
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class ArticleType(models.Model):
type_name = models.CharField(max_length=20)
def __str__(self):
#显式显示
return self.type_name
class Articles(models.Model):
title = models.CharField(max_length=50)
article_type = models.ForeignKey(ArticleType,on_delete=models.DO_NOTHING)
content = models.TextField()
author = models.ForeignKey(User, on_delete=models.DO_NOTHING)
created_time = models.DateTimeField(auto_now_add=True)
last_updated_time = models.DateTimeField(auto_now=True)
def __str__(self):
#显式显示
return "<Article:%s>" % self.title
3.3 同步数据库
对于需要使用的应用,首先进行3.1中的注册,每次修改数据项后需要再进行同步数据库
python manage.py makemigrations ->制造迁移 python manage.py migrate -> 迁移 生成0001_initial.py数据库迁移文件

在app文件夹下的admin.py中导入models.py的类或方法注册
list_display中键的内容可以在migrations文件下文件中查看:
from django.contrib import admin
from .models import Articles,ArticleType
# Register your models here.
@admin.register(ArticleType)
class ArticleTypeAdmin(admin.ModelAdmin):
list_display = ('id', 'type_name')
@admin.register(Articles)
class ArticlesAdmin(admin.ModelAdmin):
list_display = ('id', 'title', 'article_type',
'author',
'created_time',
'last_updated_time')
此时进入后台,可以在自定义的应用中添加内容,若添加失败
Django - No such table: main.auth_user___old 需要更新django pip install Django — upgrade
4. 页面显示
4.1 使用模板
前端页面和后端代码分离 减轻耦合性
在应用文件夹中创建文件夹 templates。其规定在project的settings中
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'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',
],
},
},
]
在templates下创建html文件。每个.html与views文件中对应的类或函数绑定进行。同时views中的类和函数与urls文件的path绑定。达成前端后端关联。
4.2 templates :html
.html文件中有很多相似模块化的代码,重构比较繁琐,可以设置一个同一目录下公用的base.html框架文件。
全局模板文件夹
project/settings.py -> TEMPLATES ->DIRS
项目根目录下新建templates文件夹,将上述的公共架构base.html放入文件夹中,修改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',
],
},
},
]
#其中 BASE_DIR为settings开头自动生成的根目录路径
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
base.html 项目文件夹下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}{% endblock %}</title>
{% block header_extends %}
{% endblock%}
</head>
<body>
<div class="navigation">
<a class="logo" href='{% url 'home' %}'>
<h3>S2AC.Blog</h3>
</a>
<a href="/">Home</a>
<a href="{% url 'articles_list' %}">Article</a>
</div>
{% block content %}
{% endblock %}
</body>
</html>
home.html 项目文件夹下
{% extends 'base.html' %}
{% load static%}
{% block title %}
S2AC|HOME
{% endblock %}
{% block header_extends %}
<link rel="stylesheet" href="{% static 'home.css' %}" {% endblock%} {% block content %} <h3 class="home_content">
Welcome to S2AC home! </h3>
{% endblock %}
app文件夹下
**article_details.html**
<!-- coding=gbk -->
{% extends 'base.html' %}
<!--title -->
{% block title %}
{{article.title}}
{% endblock %}
<!-- content-->
{% block content %}
<h3>{{ article.title }}</h3>
<p>Posted by {{ article.author }}</p>
<p>At: {{ article.created_time| date:"Y-m-d H:i:s"}}</p>
<p>Type:
<a href="{% url 'article_with_type' article.article_type.pk %}">
{{ article.article_type }}
</a>
</p>
<p>{{ article.content }}</p>
{% endblock %}
**articles_list.html**
<!-- coding=gbk -->
<!-- home -->
{% extends 'base.html' %}
<!-- title -->
{% block title %}
lab site
{% endblock%}
<!-- content -->
{% block content %}
{% for art in articles %}
<a href="{% url 'article_details' art.pk %}">
<h3>{{ art.title }}</h3>
</a>
<p>{{ art.content| truncatewords:30 }}</p>
{% empty %}
<p>--暂无文章,敬请期待--</p>
{% endfor %}
<p>共有{{ articles| length }}篇文章</p>
{% endblock %}
**article_with_type.html**
<!-- coding=gbk -->
{% extends 'base.html' %}
<!--title -->
{% block title %}
{{article_type.type_name}}
{% endblock %}
{% block content %}
<h3>{{article_type.type_name}}</h3>
{% for art in articles %}
<a href="{% url 'article_details'art.pk %}">
<h3>{{ art.title }}</h3>
</a>
<p>{{ art.content| truncatewords:30 }}</p>
{% empty %}
<p>--暂无文章,敬请期待--</p>
{% endfor %}
<p>共有{{ articles | length }}篇文章</p>
{% endblock %}
模板嵌套
# block 站网页位置
# includ 导入网页标签
# extends 导入网页模板
# 在其他html中调用base.html
{% extends 'base.html' %}
调用base.html中的方法
<!--title-->
{% block title %}
当前html文件需要设置的标题
{% endblock %}
<!--content-->
{% block content %}
当前html文件需要设置的内容
{% endblock %}
4.3 templates: CSS 页面设计
导航 主题内容 尾注
CSS: Cascading Style Sheets
层叠样式表 一种用来表现html或者xml等文件样式的计算机语言
使用静态文件
css代码 -> CSS文件 --|
js文件 --| -静态文件
图片 --|
project目录下新建static静态文件夹
settings.py中设置来调用此static文件夹中的内容
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static')
]
在html文件中
{% load static %}
<link rel='stylesheet' href='{% static 'base.css' %}'>
在二级引用得html中,例如base.html需要上两行代码加载css文件 但在home.html中,home加载了一部分base.html模板。
{% extends 'base.html' %}
但这一步不能集成base.html得css文件,需要设置
{% load static %}
若要加载home.css文件 需要添加
{% block header_extends %}
<link rel="stylesheet" href="{% static 'home.css' %}">
{% endblock %}
home.css
h3.home_content{
font-size: 200%;
text-align: center;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
base.css
*{
margin: 0;
padding: 0;
}
div.navigation{
background-color: #eeeeee;
border-bottom: 1px solid #cccccc;
padding: 10px 10px;
}
div.navigation a{
text-decoration: none;
color: #000000;
padding: 5px 10px;
}
div.navigation a.logo{
display: inline-block;
}
4.4 路由urls
总路由urls.py包括app的urls
|- app1 urls
项目总urls---|- app2 urls
|- app3 urls
可以从项目总urls中提取app urls放到app目录下方便管理;
app/urls.py
from django.urls import path
from . import views
#start with article
urlpatterns = [
path('<int:art_pk>', views.article_details,name='article_details'),
path('', views.articles_list, name='articles_list'),
path('type/<int:art_type_pk>',views.article_with_type,name='article_with_type')
]
project/urls.py
from django.contrib import admin
from django.urls import path,include
from . import views
urlpatterns = [
path('',views.home,name='home'),
path('admin/', admin.site.urls),
path('article/',include('s2aclab.urls')),
]
#include('app目录下的urls')
同时在project文件夹下新建views.py,与项目urls绑定,设为主页home。也可将主页放在app文件夹下,但在多app项目中,这样容易混乱。
#project/views.py
from django.shortcuts import render
def home(request):
context = {}
return render(request,'home.html',context)
对项目urls修改
* pip一键导出和安装部署环境
pip freeze —> 显示当前项目依赖库
pip freeze > requirements.txt —> 依赖库存储到
--> 当前目录下txt中pip install -r requirements.txt —> 一键安装所有依赖库
博文+博文分类
一篇博文一种分类
一篇博文多种分类
