Django全栈

Django全栈,第1张

Django

  • 一、创建项目 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提交
  • 表单
    中文件上传时必须带有enctype=“multipart/form”属性时才会包含文件内容数据
  • 表单中用标签上传文件

八、发送邮件 十九、项目部署 uwsgi nginx

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/570531.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存