流程目录


1 确认已经安装完成的软件

2 搭建Django基础框架

3 编写配置文件

4 创建第一个应用

5 模型的建立和迁移

6 URL配置

7 编辑视图

8 表单提交

9 本地局域网部署及查看

10 普通请求 和 ajax请求数据的调用

11 自定义文件以及全局配置文件的使用

12 网站小图标和网页语言设置


1 确认已经安装完成的软件

1-1 确认python

直接使用cmd 命令 python 来确认是否安装和对应的版本号

C:\Users\30818>python
Python 3.8.0 (tags/v3.8.0:fa919fd, Oct 14 2019, 19:37:50) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.

1-2 确认数据库

C:\Users\30818>mysql -uroot -p
Enter password: ********
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.21 MySQL Community Server - GPL

1-3 准备数据库绑定

准备好安装文件  PyMySQL-0.10.0-py2.py3-none-any.whl 他用于django和mysql进行连接

1-4 验证django是否能被python识别 在cmd中输入完成对应验证

C:\Users\30818> python>>> import django
>>> print(django.get_version())
3.0.3

2 搭建Django基础框架

2-1 创建虚拟环境

安装虚拟环境 是用来解决 django版本不同出现问题的情况

创建网站文件夹  并cd进入文件夹目录 项目名应避免django和test等类似名称

C:\Users\30818>e:E:\>cd website\server\hulishuju

创建虚拟环境 进入对应目录进行操作

/*虚拟环境名称自定义*/
E:\website\server\hulishuju> python -m venv hulishuju_env
/*激活并进入虚拟环境  关闭虚拟环境 deactivate*/
E:\website\server\hulishuju> hulishuju_env\Scripts\activate

后续为了方便快速进入虚拟目录 我们可以制作一个bat文件来快速进入

创建一个hulishuju_env.bat 文件

@echo off
cd \
cd hulishuju\
call hulishuju_env\Scripts\activate
cmd .

进入后前方括号代表是虚拟环境了

(hulishuju_env) E:\website\server\hulishuju>  

虚拟环境中安装一份django

依然是将 Django-3.0.3-py3-none-any.whl 放在文件夹中 直接 pip install 完成对应安装

若是断网模式 需要先依次安装相关依赖文件

asgiref-3.2.10-py3-none-any.whl    pytz-2020.1-py2.py3-none-any.whl    sqlparse-0.3.1-py2.py3-none-any.whl

(hulishuju_env) E:\website\server\hulishuju>pip install Django-3.0.3-py3-none-any.whl

安装完成后使用pip list 可以检查安装的对应文件

也可以使用如下指令检查对应的版本号

(hulishuju_env) E:\website\server\hulishuju>python -m django --version
3.0.3

2-2 建立主目录和开启测试服务器

创建主目录

/* 最后的点非常重要 他使得文件能在指定目录中被创建 */
/* django-admin startproject [站点名称] */
(hulishuju_env) E:\website\server\hulishuju>django-admin startproject hulishuju .

建立主目录文件功能如下

manage.py 命令目录一览表

hulishuju/               ----根目录 对django没有影响 可以任意重命名manage.py            ----管理django项目的 命令行工具hulishuju/            ----纯python包 当应用内部任何东西的包名 如 hulishuju.urls__init__.py        ----空间文 告知Python该目录应被认为是一个python包settings.py        ----项目配置文件urls.py            ----URL声明文件  类似网站目录asgi.py            ----在ASGI兼容的WEB服务器上的入口wsgi.py            ----在wsgi兼容的web服务器上的入口

内部环境服务器测试指令  python manage.py runserver

(hulishuju_env) E:\website\server\hulishuju>python manage.py runserver

若是可以正常进入 此时浏览 http://127.0.0.1:8000/ 即可确认到火箭和祝贺页面

本地测试服务器每一次访问请求都会重新加载一遍python代码 所以不用频繁重新 但是添加新文件等不会触发 仍需手动重启

还未配置前运行 会产生一个db.sqlite3 文件 因为是使用的自带的数据库 该文件根据下方配置完成后可删除


3 编写配置文件

E:\website\server\hulishuju\hulishuju\settings.py

编写前记得保存设置页面密钥 每个页面不同  防止错误覆盖后续项目出现问题

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'm#amq+lqj84zb6j********%%8xjytv^r!=*l'

3-1 配置语言和时区

# 配置语言
LANGUAGE_CODE = 'zh-hans'# 配置时区
TIME_ZONE = 'Asia/Shanghai'USE_I18N = TrueUSE_L10N = True#mysql是统一时区 然后根据UTC时区增减
#如果设置为false 则变为本地时区  如果应用不跨时区 那么可以 若跨时区 会混乱
#无特殊需要 直接设置False 最好 避免后续存入数据库相差8小时
USE_TZ = False

3-2 配置数据库

安装PyMySQL-0.10.0-py2.py3-none-any.whl

(hulishuju_env) E:\website\server\hulishuju>pip install PyMySQL-0.10.0-py2.py3-none-any.whl

进入初始化文件 注册mysql驱动

E:\website\server\hulishuju\hulishuju\__init__.py

# 注册pymysql驱动import pymysql
pymysql.install_as_MySQLdb()

进入配置文件 进行数据库配置

需要提前创建数据库 避免后续迁移错误  创建后 后续将数据库名填入name中

mysql> create database users charset = utf8;
Query OK, 1 row affected, 1 warning (0.12 sec)

E:\website\server\hulishuju\hulishuju\settings.py

DATABASES = {'default': {#引擎可选指对照表#django.db.backends.postgresql # PostgreSQL#django.db.backends.mysql # mysql#django.db.backends.sqlite3 # sqlite#django.db.backends.oracle # oracle'ENGINE': 'django.db.backends.mysql',# 这里是需要进入的数据库名称'NAME': 'django_library',# 其他相关信息'USER': 'root','PASSWORD': '123','HOST': '127.0.0.1','PORT': '3306',}
}

配置文件的已安装应用 即 INSTALLED_APPS  配置了相关文件 执行迁移可以将数据库表格同步

已安装app确认

INSTALLED_APPS = [# 管理员站点'django.contrib.admin',#认证授权系统'django.contrib.auth',#内容类型框架'django.contrib.contenttypes',#会话框架'django.contrib.sessions',#消息框架'django.contrib.messages',#管理静态文件的框架'django.contrib.staticfiles',
]

迁移指令执行迁移测试

(hulishuju_env) E:\website\server\hulishuju>python manage.py migrate

迁移完成后 可以前往mysql已经注册的数据库 users 下 确认迁移过来的表格

mysql> show databases;mysql> use usersmysql> show tables;

3-3 配置静态文件列表

确保 INSTALLED_APPS 包含了 django.contrib.staticfiles

INSTALLED_APPS 中  含有  'django.contrib.staticfiles' 

3-3-1  开发期间

静态文件 主要用于存储本地图片、JavaScript、CSS

媒体文件  主要用于用户上传的图片 和 音频视频等 如用户头像

能用 django.views.static.serve()  为用户上传的媒体文件提供服务

#相对路径  例如 my_app/static/my_app/example.jpg
#每一个APP中都需要新建一个static文件
STATIC_URL = '/static/'#ROOT 部署静态文件时 所有静态文件的聚合 可以进行收集
#python manage.py collectstatic
#输入该指令后 django会把所有的static文件都复制到STATIC_ROOT文件夹下
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')#非必须 绝对路径  即未绑定任何静态资源的默认目录 在配置文件中定义 STATICFILES_DIRS
#所有app共用的static文件夹
#STATICFILES_DIRS告诉django,首先到STATICFILES_DIRS里面寻找静态文件,其次再到各个app的static文件夹里面找(注意, django查找静态文件是惰性查找,查找到第一个,就停止查找了)
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static"),'/var/www/static/',
]

html使用方法

#在html页面中标注  {% load static %}
{% load static %}
<img src="{% static "my_app/example.jpg" %}" alt="My image">

定义参考如下

# 静态文件相对目录
STATIC_URL = '/static/'
# collect 静态文件收集目录
STATIC_ROOT = os.path.join(BASE_DIR, 'static')#媒体文件相对目录
MEDIA_URL = '/media/'
# collect 媒体文件收集目录
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

3-3-2 生产环境下 debug = false 下静态文件的使用

通过python manage.py collectstatic 指令收集到 static_root

配置web服务器 使其STATIC_URL下为STATIC_ROOT目录下的文件提供静态文件服务


4 创建第一个应用

创建应用

#python manage.py startapp [应用名称]
python manage.py startapp homepage

将得到包含如下文件的应用文件夹

#他将构建一个homepage 目录 结果和功能如下
homepage/migrations/        ----迁移文件生成数据库表数据等__init__.py        ----迁移文件初始化文件__init__.py        ----app初始化文件 表示app可以被应用admin.py           ----后台管理工具 用于管理model和数据库apps.py            ----生成app名称的文件models.py          ----模型文件 数据库表的映射tests.py           ----测试文件views.py           ----视图文件

5 模型的建立和迁移

激活模型 确保应用可用

进入 主目录页 配置文件 E:\website\server\hulishuju\hulishuju\settings.py 中 添加应用名称

INSTALLED_APPS = [--- snip ---'django.contrib.staticfiles','homepage', #添加自己的应用
]

配置模型  定义自己需要的字段

进入 应用页  模型文件 E:\website\server\hulishuju\homepage\models.py 中 添加对应模型

from django.db import models#添加验证类 来调用验证函数
from django.core.validators import RegexValidator
#当前时间
from django.utils import timezone# Create your models here.
class user_base_info(models.Model):#ID字段 不写会自动设置id = models.AutoField(primary_key=True);#网站类型字段 最大保存100个字符website_style = models.CharField(max_length = 100, verbose_name="网站类型");#网页数量website_page = models.SmallIntegerField(verbose_name="网站页面数量");#是否包含设计稿 选择class Website_design(models.IntegerChoices):包含 = 11不包含 = 22website_design = models.IntegerField(choices=Website_design.choices,verbose_name="是否包含设计稿");#姓名website_name = models.CharField(max_length = 100,verbose_name="姓名");#电话phone_regex = RegexValidator(regex = r'(^([a-zA-Z0-9]*@[a-zA-Z0-9]{1,4}\.)(com|cn)$)|(^[0-9]{11}$)', message ="需要输入11位手机号码或邮箱");#验证者应该是一个列表website_addr = models.CharField(validators = [phone_regex], blank = False, max_length = 50, default="未填入",verbose_name="手机/邮箱");#是否回访 并标注颜色returnvisit_type = [(None, '未启用'),('yes', '已回访'),('no', '未回访'),('black', '黑名单'),]returnvisit = models.CharField(max_length=10, choices=returnvisit_type, default='None', verbose_name="是否回访");#用户首次预估时间create_time = models.DateTimeField(auto_now_add=True, verbose_name='首次创建时间');#回访时间return_time =  models.DateTimeField(auto_now=True, verbose_name='回访完成时间');#调用时显示的名称def __str__(self):return self.website_name#定义总表名称class Meta():verbose_name_plural = '客户列表'

编辑完成 进行迁移同步 第一步验证模型代码是否有误 第二步进行数据迁移

python manage.py makemigrations  #生成migrations
python manage.py migrate   #应用migrations

紧接着创建一个超级管理员来管理刚刚创建的数据库和表格

python manage.py createsuperuser

本地运行后 即可通过 http://127.0.0.1:8000/admin/ 来进入网站管理页面

python manage.py runserver

此时登陆后 页面没有对应数据 是因为我们注册的模型 还没有被加入进来

进入 应用页 注册已经填入的模型 E:\website\server\hulishuju\homepage\admin.py 同时增加一些颜色识别和页面筛选等

from django.contrib import admin#导入模型文件
from homepage.models import user_base_info
#页面格式化
from django.utils.html import format_html# Register your models here.#装饰器注册法 直接注册
#显示表写法 是将模型 首字母大写 + Admin
@admin.register(user_base_info)
class User_base_infoAdmin(admin.ModelAdmin):# 需要显示的字段信息list_display = ('id', 'website_name', 'website_addr', 'website_style','website_page','colored_status',)#每页显示记录数list_per_page = 50#默认排序字段  - 表示倒序 ('-id',)ordering = ('id',)# 设置哪些字段可以点击进入编辑界面,默认是第一个字段list_display_links = ('id', 'website_name',)#修改管理系统文本admin.site.site_header = '狐狸数据系统'   #表格上方文字admin.site.site_title = '人员管理'        #页面显示标题#筛选器# list_filter = ('create_time', 'name_id', 'gender')  #过滤器  可选择的字段# search_fields = ('name_id', 'id', 'phone')             #搜索器  提供搜索的字段# date_hierarchy = 'create_time'                        #详细时间分层筛选 #设置文本颜色 方法要在list_display中应用def colored_status(self, obj):if obj.returnvisit == 'no':text = '未回访'color_code = 'Red'elif obj.returnvisit == 'yes':text = '已回访'color_code = 'Green'else:text = '未启用/黑名单'color_code = 'Silver'return format_html('<span style="color: {};">{}</span>',color_code, text,)colored_status.short_description = "状态" 

数据库常见错误终极修复大法

1 删除应用页 E:\website\server\hulishuju\homepage\migrations 下  __pycache__ 文件夹 和  __init__.py 的其他文件

2 进入数据库,找到django_migrations的表,删除该app名字的所有记录。并且删除该app表本身

#mysql 常用命令mysql> show databases;         #显示所有数据库
mysql> use users;              #进入名为users的数据库
mysql> show tables;            #显示所有表格
mysql> desc homepage_user_base_info;    #显示表结构mysql> delete from django_migrations where id = 18;    #删除表django_migrations第18行数据
mysql> delete from homepage_user_base_info;            #清空表
mysql> select * from  homepage_user_base_info;         #查看表
mysql> drop table homepage_user_base_info;             #删除表

3 重新执行制作和迁移指令

python manage.py makemigrations    #制作迁移文件
python manage.py migrate           #执行迁移

数据库删除字段 自增字段从最大值开始

mysql> truncate table 你的表名;         #数据全部删除 且重新定位自增字段

6 URL配置

应用页没有Urls  可以直接从 主目录页复制一个过来 urls.py

指定命名空间和url

主目录页 E:\website\server\hulishuju\hulishuju\urls.py

from django.contrib import admin
from django.urls import include, pathurlpatterns = [path('', include('homepage.urls')),path('admin/', admin.site.urls),
]

应用页 E:\website\server\hulishuju\homepage\urls.py

from django.contrib import admin
from django.urls import include path#指定命名空间
app_name = 'homepage'urlpatterns = [#参数1 匹配路径 什么都不输 则是默认路径#参数2 调用的视图函数path('', views.indexpage, name='pc_index'),path('admin/', admin.site.urls),
]

7 编辑视图

应用页  E:\website\server\hulishuju\homepage\views.py 定义一个视图模板

def indexpage(request):#传递一些值进入到页面中context = {"num1":"123","num2":"456"};return render(request, "homepage/pc_homepage.html", context)

创建临时文件夹 templates\homepage\  并将视图文件放入 pc_homepage.html

E:\website\server\hulishuju\homepage\templates\homepage\pc_homepage.html

对应静态文件 放入  E:\website\server\hulishuju\homepage\static\pc_file  文件夹中

调用静态文件  {% load static %}

{% load static %}
<!DOCTYPE html>
<html>
<head><link rel="stylesheet" type="text/css" href="{% static 'mobile_file/title.css' %}">

命名空间下name值的调用方法

window.location = "{% url 'homepage:pc_index' %}"

8 表单提交

在form表单中放入 {% csrf_token %} 用于跨站点伪造保护

<form action="#" method="post"><!-- 跨站点保护 -->{% csrf_token %}

创建表单处理虚拟视图 完成简单增删改查操作 进入 应用页  E:\website\server\hulishuju\homepage\views.py

from django.shortcuts import get_object_or_404, render
from django.http import HttpResponse
from .models import user_base_info
import json--- snip ---def formhandle(request):#处理表单 获取Post过来的数据# request.method == "GET"# request.POST['website_style']# request.POST['web_page_number']# request.POST['design']# request.POST['name_info']# request.POST['email_and_phone']#制作数据表formdata = user_base_info(website_style=request.POST['website_style'], \website_page=request.POST['web_page_number'],website_design=request.POST['design'], \website_name=request.POST['name_info'], website_addr=request.POST['email_and_phone'])#保存数据formdata.save()#网页传值# context = {"state":"存储成功 我们会尽快联系到您"};# return render(request, "homepage/pc_homepage.html", context)#js中传值# List = ['variable1', 'val1']# Dict = {'variable1': 'val1', 'variable2': 'val2'}context = {"state":"存储成功 我们会尽快联系到您"};if( request.POST['device'] == 'mobile'):return render(request ,"homepage/mobile_homepage.html", {'context': json.dumps(context),});else:return render(request ,"homepage/pc_homepage.html", {'context': json.dumps(context),});

增删改查相关指令

#1.增
Model.objects.create(**kwargs)#2.查
Model.objects.all()#3.改
m = Model.objects.get(id=1)
m.name = 'new_name'
m.save()#4.删
m = Model.objects.get(id=1)
m.delete()

可以在shell中进行相关测试 增删改查详细介绍

#进入脚本环境
(hulishuju_env) E:\website\server\hulishuju>python manage.py shell#导入模型
>>> from homepage.models import member####增
#分布插入
>>> m = member(gender = 'MALE', name_id = 'hahala', password='jiuming', phone='13245664356')
>>> m.save()
#一步插入
>>> p = member.objects.create(gender = 'MALE', name_id = 'sunwukong', password='jiuming', phone='1324566435')####查
#all()全部查询 get()单一查询 filter()满足 和 exclude() 排除
>>> all_entries = member.objects.all().filter(id=1) #包括id=1的 所有条目信息
>>> all_entries = member.objects.all().exclude(id=1) #排除id=1的 所有条目信息
>>> all_entries = member.objects.all().exclude(id=1).filter(id=3) # 混合用法#filter需满足的条件  exclude不满足的条件
>>> q1 = Entry.objects.filter(headline__startswith="What")
>>> q2 = q1.filter(pub_date__lte=datetime.date.today())
>>> q3 = q2.exclude(body_text__icontains="food")
>>> print(q3)#返回的是一个queryset结果集  无法直接使用 若仅需取出一条数据 使用Get
>>> resourlt1 = user_base_info.objects.get(id=1)
>>> print(resourlt1.website_addr)#若需要使用结果集
>>> for e in resourlt1:
...     print(e.website_addr)#多条件查询 id 大于4 小于1
>>> result = member.objects.filter(id__gt=4).exclude(id__lt=1)#限制条目查询
>>> result = member.objects.all()[5:10]
>>> result = member.objects.all()[:10]
>>> result = member.objects.all()[5:]#确认条目数
>>> result = len(member.objects.all())#排序
>>> print(member.objects.all().order_by('name_id')) 升序
>>> print(member.objects.all().order_by('-name_id')) 降序####改
>>> m = member.objects.get(id=2)
>>> m.website_addr = '18664368576'
>>> m.save()####删
>>> m = member.objects.get(id=1)
>>> m.delete()

url中进行相应配置 E:\website\server\hulishuju\homepage urls.py

from django.contrib import admin
from django.urls import include, path
from . import views#指定命名空间
app_name = 'homepage'urlpatterns = [--- snip ---path('formhandle/', views.formhandle, name='formhandle'),
]

9 本地局域网部署及查看

9-1 查看本机ip地址并记录 如下图 IP地址为 192.168.0.103

# IPv4 地址即对应地址
C:\Users\30818>ipconfig连接特定的 DNS 后缀 . . . . . . . :本地链接 IPv6 地址. . . . . . . . : fe80::e88d:bd53:ce7a:2cd8%19IPv4 地址 . . . . . . . . . . . . : 192.168.0.103子网掩码  . . . . . . . . . . . . : 255.255.255.0默认网关. . . . . . . . . . . . . : 192.168.0.1

9-2 修改允许访问的主机 进入根目录 E:\website\server\hulishuju\hulishuju\settings.py

-- snip ---
ALLOWED_HOSTS = ["*"]

9-3 将测试文件运行在 0.0.0.0:8000 端口上

(hulishuju_env) E:\website\server\hulishuju>python manage.py runserver 0.0.0.0:8000

9-4 其他机器测试是否可以通过  192.168.0.103:8000 直接访问 若无法访问 可以关闭电脑防火墙测试


10 普通请求 和 ajax请求数据的调用

请求一般分为 GET POST AJAX三个大类

10-1 HTML请求的发送

get请求发送  直接使用 A标签触发即可

<a href="{% url 'homepage:ajaxReqeust' 1 %}">普通get请求</a>

post请求发送 使用表单进行触发

<form action="{% url 'homepage:formhandle' %}" method="post">{% csrf_token %}

POST请求都需要添加  {% csrf_token %} 否则会报错

页面中{%%}的使用方法介绍

{% load static %}                                  #加载静态文件
{% static 'pc_file/source/Ean.png' %}              #使用静态文件
{% csrf_token %}                                   #跨站点保护
{{variable}}                                       #变量的使用#if语句
{% if %}
{% else %}
{% endif %}#for语句
{% for 自定义字段 in  传递过来的数据包 %}//执行的代码
{% empty %}//为空没有数据执行的代码
{% endfor %}

ajax请求发送

// ajax方法$(".posttest").click(function(){$.ajax({//发送请求的地址url:"{% url 'homepage:ajaxReqeust' 1 %}",//请求的方式  POST/GET默认GET                          type:"POST",//发送的数据               data:{username:"yuan",password:123,csrfmiddlewaretoken:$('[name="csrfmiddlewaretoken"]').val()},//成功后执行的回调函数  服务器返回数据  和  返回状态success:function(data, textStatus){console.log("success" + data);//解析数据var data=JSON.parse(data)console.log(data.user);},//失败执行的回调函数 XMLHttpRequest 对象,错误信息,(可能)捕获的错误对象。error: function (XMLHttpRequest, textStatus, err) {alert("error" + arguments);},//请求完成后回调函数 (请求成功或失败时均调用) XMLHttpRequest 对象,成功信息字符串complete: function (jqXHR, textStatus) {alert("complete" + textStatus);}});});

10-2 中间件请求接收和回调

#判断请求的方式 GET/POST
request.method == "GET/POST"#接收GET值
request.GET['website_style']#接收POST值
request.POST['website_style']#######html页面中的回传
#普通字典回传  单值
context = {"state":"存储成功 我们会尽快联系到您"};
return render(request, "homepage/ajaxtest.html", context)#单值的使用
{{state}}#数据库查询回传 多值
m = user_base_info.objects.all();
context = { "datapage" : datas }
return render(request, "homepage/ajaxtest.html", context)#多值的使用
{% for 自定义字段data in  传递过来的数据包datapage %}//执行的代码
{% empty %}//为空没有数据执行的代码
{% endfor %}######js页面中的回传
# 单个值返回
# return HttpResponse(request.POST.get("username"))#js中 单值使用
success:function(data, textStatus){console.log(data);
},# 多个值返回
back_dict = {'user':'123', 'message':'456'};
return HttpResponse(json.dumps(back_dict))#js中 多值使用
success:function(data, textStatus){console.log("success" + data);//解析数据var data=JSON.parse(data)console.log(data.user);
},

11 邮件发送功能

进入 根目录\setting.py

####本地测试配置
#邮件配置
#EMAIL_HOST= 'smtp.163.com' #163邮箱的服务器
EMAIL_HOST= 'smtp.qq.com' #qq邮箱的服务器
EMAIL_USE_TLS = True
#EMAIL_USE_SSL = True #安全协议,与EMAIL_USE_TLS二选其一,只能有一个是True
EMAIL_PORT= 25  #具体端口见上一步,注意是否将EMAIL_USE_SSL设置为True,如果是就是SSL端口,否就是非SSL端口
EMAIL_HOST_USER = '308184255@qq.com' #你的发件用户
EMAIL_HOST_PASSWORD = 'hl****vkcabh' #你获取到的授权码
DEFAULT_FROM_EMAIL = '308184255@qq.com'  #默认发件用户###阿里云服务器禁25端口 以及QQ邮箱无法适配 需要使用163邮箱 同时开启465端口的入口规则
EMAIL_HOST= 'smtp.163.com' #163邮箱的服务器
#安全协议,与EMAIL_USE_TLS二选其一,只能有一个是True
EMAIL_USE_TLS = False
EMAIL_USE_SSL = True
#具体端口见上一步,注意是否将EMAIL_USE_SSL设置为True,如果是就是SSL端口,否就是非SSL端口
#由于阿里云禁止了25号端口 必须使用 SSL 587号端口
EMAIL_PORT= 465
EMAIL_HOST_USER = 'sdm18664368576@163.com' #你的发件用户
EMAIL_HOST_PASSWORD = 'FZZ****YUSY' #你获取到的授权码
DEFAULT_FROM_EMAIL = 'sdm18664368576@163.com'  #默认发件用户#admin 管理员账号配置 debug 为 false时自动启用
# ADMINS = [('John', 'john@example.com'), ('Mary', 'mary@example.com')]
ADMINS = [('石丁铭', 'sdm18664368576@163.com')]
#SERVER_EMAIL 是发送到admins和managers的邮件发送者,如果不配置默认为root@localhost
#然而,某些邮件服务商拒绝来自这些地址的邮件 所以还是需要配置的
SERVER_EMAIL = 'sdm18664368576@163.com'

在需要发送邮件的地方进行发送

##################单个邮件发送
from django.core.mail import send_mail#发送邮件进行通知
#send_mail的参数分别是
#邮件标题,邮件内容,发件箱(settings.py中设置过的那个),收件箱列表(可以发送给多个人),失败静默(若发送失败,报错提示我们)
#mailmsg=send_mail("标题", "内容", 'xxxxx@xx.com',['xxx1@xx.com',"xxx2@xx.com"], fail_silently=False)send_mail("有新用户注册了","新注册用户名称是: " + request.POST['name_info'] + "\n新注册用户的联系方式是: " + request.POST['email_and_phone'], '308184255@qq.com', ['308184255@qq.com'],    fail_silently=False,);#多个邮件发送
from django.core.mail import send_mass_mailmessage1 = ('你好呀张女士', '这是一封测试邮件 送给张女士也送给石先生', '308184255@qq.com', ['1464957229@qq.com','308184255@qq.com']
)message2 = ('你好呀石先生', '这是一封测试邮件 只送给石先生', '308184255@qq.com', ['308184255@qq.com']
)send_mass_mail((message1, message2), fail_silently=False);

11 自定义文件以及全局配置文件的使用

11-1 自定义文件 可以通过在根目录直接创建一个py文件 来进行引入调用

在根目录中 建立我们需要引入的文件

视图文件中可以直接进行使用

#导入自定义文件
import my_conf#调用文件中的方法
a = my_conf.myconf()#读取值
print(a["邮件发送功能"]);

11-2 全局配置文件的做法

思路 直接写死的常量 无法在后台通过按钮来管理 所以要创建一个数据库 来写一份配置表, 然后通过数据库中的配置表 取出值 进行调用 后续也方便修改

首先进入 应用页\models.py  建立一份配置表 主要分为两个字段  功能名称 和 功能开关

#个人网站配置
class my_conf(models.Model):#配置序号id = models.AutoField(primary_key=True);#功能名function_name =  models.CharField(max_length=20,default="null",verbose_name="功能名称");#开关 布尔类型switch = models.BooleanField(default="False",verbose_name="功能开关");

写完后进行文件迁移

python manage.py makemigrations
python manage.py migrate

视图文件中进行相关调用即可

#导入数据库
from .models import user_base_info,my_conf#方法中读取和使用
def formhandle(request):Email_send_func = my_conf.objects.get(function_name="邮件发送功能").switch;kill_people_func = my_conf.objects.get(function_name="其他功能").switch;print(Email_send_func);print(kill_people_func);

12 网站小图标和网页语言设置

<!-- 网站字符编码 -->
<meta charset="utf-8" />
<!-- 网站小图标访问 -->
<link rel="shortcut icon" type="text/css" href="{% static 'favicon.ico' %}">

django搭建 - 本地服务器设置与配置相关推荐

  1. 六、Webpack详解学习笔记——webpack的安装、起步、配置、loader的使用、webpack中配置Vue、plugin的使用、搭建本地服务器、webpack配置的分离

    一.认识webpack 什么是webpack? 这个webpack还真不是一两句话可以说清楚的. 我们先看看官方的解释: At its core, webpack is a static module ...

  2. iOS开发网络篇—搭建本地服务器

    iOS开发网络篇-搭建本地服务器 一.简单说明 说明:提前下载好相关软件,且安装目录最好安装在全英文路径下.如果路径有中文名,那么可能会出现一些莫名其妙的问题. 提示:提前准备好的软件 apache- ...

  3. WampServer 搭建本地服务器及 XSS 基本原理和初步实践(一)

    目录 一.WampServer 搭建本地服务器 1.WampServer 下载安装及变小绿标 方法一:官网 方法二:中文站 问题及解决 2.访问本地服务器相关配置 1.检查是否正常搭建服务器 2.关闭 ...

  4. Webpack搭建本地服务器

    1.开启本地服务器 1.1.为什么要搭建本地服务器? 目前我们开发的代码,为了运行需要有两个操作: 操作一:npm run build,编译相关的代码: 操作二:通过live server或者直接通过 ...

  5. gitblit搭建本地服务器

    gitblit搭建本地服务器 目标概述:在本地搭建git服务器管理项目. 准备事项:1.下载并且安装jdk.2.配置好jdk的环境变量.3.在cmd输入 java -version 查看jdk版本.( ...

  6. 纯Java+eclipse+Asix2+Tomcat8+SQLite (搭建本地服务器)

    初次搭建本地服务器~ 参考:http://blog.sina.com.cn/s/blog_4979ec3e0101ad80.html http://blog.csdn.net/zztfj/articl ...

  7. win10搭建本地服务器(IIS)

    参考:win10搭建本地服务器(IIS) - 薛定谔病态猫 - 博客园 1. 系统环境Windows10   2. 打开程序和功能,选择左边启用或关闭 Windows 功能,勾选 Internet I ...

  8. 使用wamp搭建本地服务器及本地服务器的访问

      在学习Android开发网络知识的部分,为了便于调试,需要自己搭建服务器.没有必要从网络上花钱购买服务器,这里我们可以自己在电脑上搭建本地服务器.只要电脑和手机连接到了同一个局域网,比如都连接同一 ...

  9. python搭建本地服务器

    为什么要搭建服务器? 在进行JavaScript开发或一些可视化工作的时候,搭建服务器是必不可少的.作为穷学生党,不可能去购置一台价格昂贵的服务器,只能选择阿里云或其他平台的云服务器,但是每月需要一定 ...

最新文章

  1. mysql导出数据 程序_MySQL数据导出与导入程序代码
  2. 兰州计算机速成班都学什么,兰州当众讲话速成班
  3. python语言需要变量生明吗_python需要定义变量吗
  4. 百度Create2021:百度地图日均位置服务请求次数突破1300亿
  5. linux 线程优先级的高低和执行顺序的关系,混乱的Linux内核实时线程优先级
  6. 洛谷——P1305 新二叉树(新建二叉树以及遍历)
  7. 安装vuejs全过程、淘宝镜像
  8. 联想高校AI精英挑战赛争霸浙江大学,“管道医生”项目晋级赛摘得桂冠
  9. 深入Java虚拟机-第二章-Java内存区域-学习笔记
  10. FMS关于代理共享对象
  11. java quartz配置_Quartz配置参考
  12. 《21天学通Java(第6版)》—— 2.7 总结
  13. android 动态获取权限
  14. 有监督的SAR变化检测公开数据集
  15. 【独家专访】李飞飞团队、康奈尔Weinberger团队、密歇根大学最新CVPR热点论文作者解读
  16. Python尝试爬取同花顺A股行情
  17. 电脑文件夹怎么批量重命名
  18. 压力测试/性能测试工具LoadRunner录制脚本详细步骤(一)
  19. 高精度地图偏转基础知识
  20. Python编程入门教程(以在线评测平台为载体)

热门文章

  1. 物理渲染学习笔记(二)——光的传播
  2. Eigen GO Ceres
  3. 如何在路由器上设置PPPoE(ADSL虚拟拨号)上网,即(宽带拨号)?
  4. kingedit 上传php_kindeditor=4.1.5上传漏洞复现
  5. c++ 11 原子操作库 (std::atomic)(一)
  6. AIR系列|板载LED|gpio引脚选择|GPIO|流水灯|LuatOS-SOC接口|官方demo|学习(20-1):GPIO库基础
  7. AnchorFree系列算法详解
  8. Linux实践——第六次实验课上机
  9. UDP端口连通性检查
  10. family first.