一、创建项目 settings配置
二、路由
三、请求与响应
- 请求
- 响应
四、模板层
五、静态文件
六、应用及分布路由
七、模型层
八、ORM
- 九、Admin后台管理
- 创建管理用户
- 注册模型到管理后台
- 模型管理器类
- 十、关系映射
- 十
一、cookies和session
- 十
二、缓存
- 十
三、中间件
- 十
四、分页
- 十
五、生成csv文件
- 十
六、内建用户系统
- 十
七、文件上传
- 十
八、发送邮件
- 十九、项目部署
- uwsgi
- nginx
一、创建项目 settings配置
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# print(os.path.abspath(__file__)) #sittings.py 文件的绝对路径
# print(os.path.dirname(os.path.abspath(__file__))) #sittings.py的上级目录
# print(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) #项目主目录
'''
C:\Users\Administrator\mysite\new\new\settings.py
C:\Users\Administrator\mysite\new\new
C:\Users\Administrator\mysite\new
'''
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'a9*en*%+9c9z4snuq6_47kjeqa+=!zz*#t8@dijs_23!ma+l1k'
DEBUG = True
'''
启动模式
True - 调试模式:1.检测代码修改后自动重启。
2.提供报错页面。
False - 正式上线
'''
ALLOWED_HOSTS = []
#区别同服务器上不同站点,HOST请求头值(填域名)
#APP配置
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
#中间件
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',
]
ROOT_URLCONF = 'new.urls'
#主路由文件位置
#模板配置
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'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',
],
},
},
]
WSGI_APPLICATION = 'new.wsgi.application'
#数据库配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
LANGUAGE_CODE = 'en-us'
#语言信息配置 'zh-Hans'
TIME_ZONE = 'UTC'
#时区设置 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = True
#静态文件路径
STATIC_URL = '/static/'
二、路由
URL结构
protocol://hostname[:port]/path[?query][#fragment]
protocol(协议) http:// 、 https:// 、file://
hostname(主机名)tts.tmooc.cn、127.0.0.1
prot(端口号) 80 默认不显示
path(路由地址) video/showVideo 主机上的目录或文件地址
query(查询) ?menuld=657421&version=AID999 网页传递参数get 用&隔开 参数名和值用=隔开
fragment(锚点) version=AID999#subject 字符串,用于指定网页中的片段
处理URL请求
根据settings - ROOT_URLCONF找到主路由文件urls;
再找urls中的urlpatterns变量[包含多个路由数组];
依次匹配urlpatterns中的path
path(‘路径’,对应函数)
urlpatterns = [
path('admin/', admin.site.urls),
path('page/2003/',views.page_2003),
path('page/2004/',views.page_2004),
]
视图函数
#def xxx_view(request,[其他参数...]):
# return HttpResponse对象
from django.http import HttpResponse
def page1_view(request):
html = "第一个页面"
return HttpResponse(html)
URL -> 主路由path ->函数(from.import views) -> 编写函数
path()函数
导入 - from django.urls import path
语法 - path(route,views,name=None)
route:字符串,匹配的请求路径
views:指定路径所对应的视图函数名称
name:用于给地址起别名(反向解析)
path转换器
#path('page/',views.xxx)
#http://127.0.0.1:8000/page/(int)
#urls.py:
path('page/' ,views.pagen_view)
path('//' ,views.cal_view)
#views.py:
def pagen_view(request,pg):
html = '这是%s的网页'%(pg)
return HttpResponse(html)
def cal_view(request,n,op,m):
if op not in ['add','sub','mul']:
return HttpResponse("Your op is wrong")
result = 0
if op == "add":
result = n + m
elif op == 'sub':
result = n-m
elif op == 'mul':
result = n * m
return HttpResponse('结果为:%s'%(result))
re_path() 正则路径匹配
from django.urls import re_path
re_path(r'^(?P\d{1,2})/(?P\w+)/(?P\d{1,2})$' ,views.cal2_view)
#其他与上面相同
URL拼写规则
绝对地址 http://127.0.0.1:8000/topic/page/1
相对地址1 /page/1 = http://127.0.0.1:8000/topci/page/1
相对地址2 page/1 = http://127.0.0.1:8000/topci/page/page/1
反向解析
利用path别名动态查找相应URL地址
path(‘page’,views.page_view,name=“page_url”)
#在模板中
{% url '别名'%}
{% url '参数' age='18' %}
#在视图中
from django.urls import reverse
def test_url(request):
url = reverse('base_index')
return HttpResponseRedirect(url)
三、请求与响应
请求请求即是Django中视图函数中的request对象,属于python的类包含了请求的所有信息。
path_info:URL字符串
method:字符串 GET或POST
GET: QueryDict查询字典对象
POST:QueryDict查询字典对象
FILES:类似字典对象,包含所有上传信息
def test_request(request):
print('path info is',request.path_info)
print('method is',request.method)
print('querystring is',request.GET)
print('full path is',request.get_full_path())
#path info is /test_request
#method is GET
#querystring is
#full path is /test_request?a=1&b=2
响应
HttpResponseRedirect 302
HttpResponseNotModified 304
HttpResponseBadRequest 400
HttpResponseNotFound 404
HttpResponseForbidden 403
HttpResponseServerError 500
#重定向
from django.http import HttpResponseRediret
def test_request(request):
print('path info is',request.path_info)
print('method is',request.method)
print('querystring is',request.GET)
print('full path is',request.get_full_path())
return HttpResponseRediret('/page/1')
def test_get_post(request):
if request.method == 'GET':
pass
elif request.method == 'POST':
#处理用户提交数据
pass
else:
pass
return HttpResponse('xxxxxx')
GET获取提交数据
request.GET[‘参数名’]
request.GET.get(‘参数名’,‘默认值’)
request.GET.getlist(‘参数名’)
if requesrt.method == 'GET':
print(request.GET['a'])
print(request.GET.get('c','no c'))
print(request.GET.getlist('a'))
POST提交获取数据
method='post' action="/login">if request.method == "POST":
处理POST请求数据
else:
非POST
request.POST[‘参数名’]
request.POST.get(‘参数名’,‘默认值’)
request.POST.getlist(‘参数名’)
四、模板层
模板配置
创建模板文件夹/templates
settings设置
设置DIRS > ‘DIRS’:[os.path.join(BASE_DIR,‘templates’)]
模板加载
from django.shortcuts import render
return render(request,'模板名',字典数据)
视图层与模板层交互
def xxxview(request):
dic = {
'变量':'值'}
return render(request,'xxx.html',dic)
#dic必须为字典
模板变量
def test_html_param(request):
dic = {}
dic['int'] = 88
dic['str'] = 'guoxiaonao'
dic['list'] = ['Tom','Jack','Lily']
dic['dict'] = {'a':9,'b':8}
dic['func'] = say_hi
dic['class_obj'] = Dog()
return render(request,'test_html_param.html',dic)
def say_hi():
return 'hahaha'
class Dog:
def say(self):
return 'wangwang'
模板调用变量
<h3>int 是{{int}}h3>
<h3>str 是{{str}}h3>
<h3>list 是{{list}}h3>
<h3>list 是{{list.0}}h3>
<h3>dict 是{{dict}}h3>
<h3>dict['a'] 是{{dict.a}}h3>
<h3>function 是{{func}}h3>
<h3>class_obj 是{{class_obj.say}}h3>
模板标签
{% %}
模板过滤器
|
模板继承
父模板 base.html
{% block title %}
可替换内容
{% endblock %}
>>不可修改<<
{% block info %}
可替换内容
{% endblock %}
子模板 html
{% extends 'base.html' %}
{% block title %}
替换内容
{% endblock %}
{% block info%}
替换内容
{% endblock %}
return render(request,‘base.html’,locals())可打包视图函数中的对象为一个字典
五、静态文件
配置静态文件路径
settings.py
STATIC_URL = '/static/'#路径
STATICFILES_DIRS = (
os.path.join(BASE_DIR,''static''),
)#文件夹名
模板引用静态文件
#加载
{% load static %}
#引用
<img src=''{% static 'image/jpg.png' %}''>
六、应用及分布路由
创建APP
manage.py startapp music
注册APP
settings.py
INSTALLED_APP = [
'music',
]
分布式路由
#主路由调用include函数
from django.urls import include
urlpatterns = [
#主路由分发分路由
#include('app名.子路由文件名')
path('music',include('music.urls')
]
#应用配置urls.py
from django.urls import path
from.import views
urlpatterns =[
path('index',views.index_view)
]
分布模板
app文件夹下建templates文件夹
settings.py - TEMPLATE - APP_DIRS : TRUE
优先查找根目录模板
七、模型层
安装ORM
pip install mysqlclient
安装创建MySQL数据库
配置settings
DATABASES
映射关系
ORM类 - 数据表
ORM对象 - 数据行
ORM属性 - 字段
八、ORM 九、Admin后台管理 创建管理用户
manage.py createsuperuser
键入注册信息
注册模型到管理后台#admin.py
from .models import Book
admin.site.register(Book)
模型管理器类
#app/admin.py
十、关系映射
十一、cookies和session
十
二、缓存
十
三、中间件
十
四、分页
十
五、生成csv文件
十
六、内建用户系统
十
七、文件上传
前端规范:
- 文件上传必须用POST提交
- 表单
- 表单中用标签上传文件
八、发送邮件 十九、项目部署 uwsgi nginx
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)