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 = 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 %}
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
		不包含 = 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 你的表名;		  #数据全部删除 且重新定位自增字段

6 URL配置

应用页没有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),
]

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 %}



    

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

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

8 表单提交

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

{% 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%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 直接访问 若无法访问 可以关闭电脑防火墙测试


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

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

10-1 HTML请求的发送

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

普通get请求

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 = '[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 自定义文件以及全局配置文件的使用

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 网站小图标和网页语言设置




 

你可能感兴趣的:(网站搭建)