django搭建 - 本地服务器设置与配置
流程目录
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搭建 - 本地服务器设置与配置相关推荐
- 六、Webpack详解学习笔记——webpack的安装、起步、配置、loader的使用、webpack中配置Vue、plugin的使用、搭建本地服务器、webpack配置的分离
一.认识webpack 什么是webpack? 这个webpack还真不是一两句话可以说清楚的. 我们先看看官方的解释: At its core, webpack is a static module ...
- iOS开发网络篇—搭建本地服务器
iOS开发网络篇-搭建本地服务器 一.简单说明 说明:提前下载好相关软件,且安装目录最好安装在全英文路径下.如果路径有中文名,那么可能会出现一些莫名其妙的问题. 提示:提前准备好的软件 apache- ...
- WampServer 搭建本地服务器及 XSS 基本原理和初步实践(一)
目录 一.WampServer 搭建本地服务器 1.WampServer 下载安装及变小绿标 方法一:官网 方法二:中文站 问题及解决 2.访问本地服务器相关配置 1.检查是否正常搭建服务器 2.关闭 ...
- Webpack搭建本地服务器
1.开启本地服务器 1.1.为什么要搭建本地服务器? 目前我们开发的代码,为了运行需要有两个操作: 操作一:npm run build,编译相关的代码: 操作二:通过live server或者直接通过 ...
- gitblit搭建本地服务器
gitblit搭建本地服务器 目标概述:在本地搭建git服务器管理项目. 准备事项:1.下载并且安装jdk.2.配置好jdk的环境变量.3.在cmd输入 java -version 查看jdk版本.( ...
- 纯Java+eclipse+Asix2+Tomcat8+SQLite (搭建本地服务器)
初次搭建本地服务器~ 参考:http://blog.sina.com.cn/s/blog_4979ec3e0101ad80.html http://blog.csdn.net/zztfj/articl ...
- win10搭建本地服务器(IIS)
参考:win10搭建本地服务器(IIS) - 薛定谔病态猫 - 博客园 1. 系统环境Windows10 2. 打开程序和功能,选择左边启用或关闭 Windows 功能,勾选 Internet I ...
- 使用wamp搭建本地服务器及本地服务器的访问
在学习Android开发网络知识的部分,为了便于调试,需要自己搭建服务器.没有必要从网络上花钱购买服务器,这里我们可以自己在电脑上搭建本地服务器.只要电脑和手机连接到了同一个局域网,比如都连接同一 ...
- python搭建本地服务器
为什么要搭建服务器? 在进行JavaScript开发或一些可视化工作的时候,搭建服务器是必不可少的.作为穷学生党,不可能去购置一台价格昂贵的服务器,只能选择阿里云或其他平台的云服务器,但是每月需要一定 ...
最新文章
- mysql导出数据 程序_MySQL数据导出与导入程序代码
- 兰州计算机速成班都学什么,兰州当众讲话速成班
- python语言需要变量生明吗_python需要定义变量吗
- 百度Create2021:百度地图日均位置服务请求次数突破1300亿
- linux 线程优先级的高低和执行顺序的关系,混乱的Linux内核实时线程优先级
- 洛谷——P1305 新二叉树(新建二叉树以及遍历)
- 安装vuejs全过程、淘宝镜像
- 联想高校AI精英挑战赛争霸浙江大学,“管道医生”项目晋级赛摘得桂冠
- 深入Java虚拟机-第二章-Java内存区域-学习笔记
- FMS关于代理共享对象
- java quartz配置_Quartz配置参考
- 《21天学通Java(第6版)》—— 2.7 总结
- android 动态获取权限
- 有监督的SAR变化检测公开数据集
- 【独家专访】李飞飞团队、康奈尔Weinberger团队、密歇根大学最新CVPR热点论文作者解读
- Python尝试爬取同花顺A股行情
- 电脑文件夹怎么批量重命名
- 压力测试/性能测试工具LoadRunner录制脚本详细步骤(一)
- 高精度地图偏转基础知识
- Python编程入门教程(以在线评测平台为载体)
热门文章
- 物理渲染学习笔记(二)——光的传播
- Eigen GO Ceres
- 如何在路由器上设置PPPoE(ADSL虚拟拨号)上网,即(宽带拨号)?
- kingedit 上传php_kindeditor=4.1.5上传漏洞复现
- c++ 11 原子操作库 (std::atomic)(一)
- AIR系列|板载LED|gpio引脚选择|GPIO|流水灯|LuatOS-SOC接口|官方demo|学习(20-1):GPIO库基础
- AnchorFree系列算法详解
- Linux实践——第六次实验课上机
- UDP端口连通性检查
- family first.