项目文件中的setings.py
注册应用
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'booktest.apps.BooktestConfig', #注册自己的应用
]
应许访问的主机列表
ALLOWED_HOSTS = []
注册中间件防火墙
同时需要在应用下面创建middleware.py
的文件。
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'booktest.middleware.BlockIPS', # 使用中间件功能开启防火墙block IP。
]
middleware.py
设置:
from django.utils.deprecation import MiddlewareMixin
from django.http import HttpResponse
class BlockIPS(MiddlewareMixin):
'''
中间件类,调用顺序。
1、接收到请求。
2、process_request处理。(中间件)
3、URL匹配完成。
4、process_view处理。(中间件)
5、View函数匹配进行返回。
6、process_response处理(中间件)
'''
EXCLUDE_IPS = ['129.0.0.1']
# def __init__(self, response):
# '''服务器重启之后,接收第一个请求时调用'''
# print('----init----')
# super(self, response)
def process_request(self, request):
'''产生request对象之后, url匹配之前调用'''
print('----process_request----')
def process_view(self, request, view_func, *view_args, **view_kwargs):
'''ur1匹配之后,视图函数调用之前调用'''
print('----process_view----')
uip = request.META['REMOTE_ADDR']
if uip in BlockIPS.EXCLUDE_IPS:
return HttpResponse('你已经被我发现了')
def process_response(self, request, response):
'''视固函数调用之后,内容返回浏览器之前'''
print('----process_response----')
return response
模板路径设置
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [Path.joinpath(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',
],
},
},
]
设置使用MySQL数据库
同时需要修改项目文件夹中的__init__.py
,添加数据库初始化。
DATABASES = {
'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': BASE_DIR / 'db.sqlite3',
'ENGINE': 'django.db.backends.mysql',
'NAME': 'django_test2',
'USER': 'lindong',
'PASSWORD': '1a.Lindong',
'HOST': '192.168.101.100',
'PORT': '3306',
}
}
配置__init__.py
文件:
import pymysql
pymysql.version_info = (1, 4, 13, "final", 0)
pymysql.install_as_MySQLdb()
设置本地化,启用管理后台账号
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
使用shell
创建管理员账号和密码:
python manage.py createsuperuser
设置静态文件目录
STATIC_URL = '/static/' #设置静态文件的url
STATICFILES_DIRS = [Path.joinpath(BASE_DIR, 'static')] #设置静态文件目录
MEDIA_ROOT = Path.joinpath(BASE_DIR, 'static', 'media') #设置媒体文件目录
设置redis存储session信息
SESSION_ENGINE = 'redis_sessions.session'
SESSION_REDIS = {
'host': '192.168.101.100',
'port': 6379,
'db': 2,
'password': '',
'prefix': 'session',
'socket_timeout': 1
}
设置django-redis作为cache
安装 django-redis 最简单的方法就是用 pip :
pip install django-redis
为了使用 django-redis , 你应该将你的 django cache setting 改成这样:
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
URL 格式举例
- redis://: 普通的 TCP 套接字连接
- rediss://: SSL 包裹的 TCP 套接字连接
- unix://: Unix 域套接字连接
redis://[:password]@localhost:6379/0
rediss://[:password]@localhost:6379/0
unix://[:password]@/path/to/socket.sock?db=0
在某些环境下连接密码放在 url 是不安全的, 这时你可以忽略密码或者使用方便的 OPTIONS 设置:
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"PASSWORD": "mysecret"
}
}
}
设置django-redis 作为session backend 使用配置
Django 默认可以使用任何 cache backend 作为 session backend, 将 django-redis 作为 session 储存后端不用安装任何额外的 backend
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"
项目文件中的urls.py
在项目文件夹中设置应用使用的url,将流量引入到应用设置应用文件下的url分配到具体的视图函数处理。
项目目录下的urls.py
from django.contrib import admin
from django.urls import path, re_path, include
urlpatterns = [
path('admin/', admin.site.urls),
re_path(r'^', include(('booktest.urls', 'booktest'), namespace='booktest')),
]
应用目录下的urls.py
from django.urls import path, re_path
from booktest import views
urlpatterns = [
# re_path(r'^index', views.index),
re_path(r'^set', views.set_session),
re_path(r'^get$', views.get_session),
]
视图处理
接收到url请求后应用目录下的views.py
处理方式:
from django.shortcuts import render, HttpResponse
# Create your views here.
def set_session(request):
request.session['name'] = 'lindong'
request.session['age'] = 18
return HttpResponse('OK')
def get_session(request):
name = request.session['name']
age = request.session['age']
return HttpResponse(name + '---' +str(age))
数据库关联
使用应用目录下的models.py
文件与数据库中的表关联
创建与数据的关联关系
from django.db import models
# Create your models here.
class AreaInfo(models.Model):
atitle = models.CharField(max_length=20, verbose_name='地区')
# 自关联
aParent = models.ForeignKey('self', verbose_name='主城市', null=True, blank=True, on_delete=models.CASCADE)
def __str__(self):
return self.atitle
def id(self):
return self.id
id.short_description = '城市ID'
class PicUp(models.Model):
'''上传图片'''
pic_up = models.ImageField(upload_to='booktest', unique=True)
创建迁移文件
执行生成迁移文件命令后,会在应用booktest目录下的migrations目录中生成迁移文件。
python manage.py makemigrations
执行迁移
python manage.py migrate
文章目录
评论抢沙发