1 确认已经安装完成的软件
2 搭建Django基础框架
3 编写配置文件
4 创建第一个应用
5 模型的建立和迁移
6 URL配置
7 编辑视图
8 表单提交
9 本地局域网部署及查看
10 普通请求 和 ajax请求数据的调用
11 自定义文件以及全局配置文件的使用
12 网站小图标和网页语言设置
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-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 文件 因为是使用的自带的数据库 该文件根据下方配置完成后可删除
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 = True
USE_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 users
mysql> 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 %}
定义参考如下
# 静态文件相对目录
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目录下的文件提供静态文件服务
创建应用
#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 ----视图文件
激活模型 确保应用可用
进入 主目录页 配置文件 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
不包含 = 22
website_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(
'{}',
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 你的表名; #数据全部删除 且重新定位自增字段
应用页没有Urls 可以直接从 主目录页复制一个过来 urls.py
指定命名空间和url
主目录页 E:\website\server\hulishuju\hulishuju\urls.py
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
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),
]
应用页 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 %}
命名空间下name值的调用方法
window.location = "{% url 'homepage:pc_index' %}"
在form表单中放入 {% 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-1 查看本机ip地址并记录 如下图 IP地址为 192.168.0.103
# IPv4 地址即对应地址
C:\Users\30818>ipconfig
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : fe80::e88d:bd53:ce7a:2cd8%19
IPv4 地址 . . . . . . . . . . . . : 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 直接访问 若无法访问 可以关闭电脑防火墙测试
请求一般分为 GET POST AJAX三个大类
10-1 HTML请求的发送
get请求发送 直接使用 A标签触发即可
普通get请求
post请求发送 使用表单进行触发
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);
},
进入 根目录\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 = '[email protected]' #你的发件用户
EMAIL_HOST_PASSWORD = 'hl****vkcabh' #你获取到的授权码
DEFAULT_FROM_EMAIL = '[email protected]' #默认发件用户
###阿里云服务器禁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 = '[email protected]' #你的发件用户
EMAIL_HOST_PASSWORD = 'FZZ****YUSY' #你获取到的授权码
DEFAULT_FROM_EMAIL = '[email protected]' #默认发件用户
#admin 管理员账号配置 debug 为 false时自动启用
# ADMINS = [('John', '[email protected]'), ('Mary', '[email protected]')]
ADMINS = [('石丁铭', '[email protected]')]
#SERVER_EMAIL 是发送到admins和managers的邮件发送者,如果不配置默认为root@localhost
#然而,某些邮件服务商拒绝来自这些地址的邮件 所以还是需要配置的
SERVER_EMAIL = '[email protected]'
在需要发送邮件的地方进行发送
##################单个邮件发送
from django.core.mail import send_mail
#发送邮件进行通知
#send_mail的参数分别是
#邮件标题,邮件内容,发件箱(settings.py中设置过的那个),收件箱列表(可以发送给多个人),失败静默(若发送失败,报错提示我们)
#mailmsg=send_mail("标题", "内容", '[email protected]',['[email protected]',"[email protected]"], fail_silently=False)
send_mail(
"有新用户注册了",
"新注册用户名称是: " + request.POST['name_info'] + "\n新注册用户的联系方式是: " + request.POST['email_and_phone'],
'[email protected]',
['[email protected]'],
fail_silently=False,
);
#多个邮件发送
from django.core.mail import send_mass_mail
message1 = (
'你好呀张女士',
'这是一封测试邮件 送给张女士也送给石先生',
'[email protected]',
['[email protected]','[email protected]']
)
message2 = (
'你好呀石先生',
'这是一封测试邮件 只送给石先生',
'[email protected]',
['[email protected]']
)
send_mass_mail((message1, message2), fail_silently=False);
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);