" name="sm-site-verification"/>
侧边栏壁纸
博主头像
PySuper博主等级

千里之行,始于足下

  • 累计撰写 203 篇文章
  • 累计创建 14 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录
Web

Django 必会配置(一)

PySuper
2019-10-24 / 0 评论 / 0 点赞 / 14 阅读 / 7760 字
温馨提示:
所有牛逼的人都有一段苦逼的岁月。 但是你只要像SB一样去坚持,终将牛逼!!! ✊✊✊

Django 必会知识点

  • 配置文件中的每一项
  • rest_framework
  • admin或者Xadmin‘的站点管理
  • models
  • urls中的写法
    • 单个请求
    • 使用类视图
    • 使用列表添加的方式
  • 模板渲染
  • 页面静态化
  • uwsgi+nginx部署

MVC / MVT

MVC

  • M全拼为Model,主要封装对数据库层的访问,对数据库中的数据进⾏增、删、改、查操作
  • V全拼为View,⽤于封装结果,⽣成⻚⾯展示的html内容
  • C全拼为Controller,⽤于接收请求,处理业务逻辑,与Model和View交互,返回结果

MVT

  • M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进⾏数据处理
  • V全拼为View,与MVC中的C功能相同,接收请求,进⾏业务处理,返回应答
  • T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html

Debug

可使用from .base import × 导入当前setting_base

from .base import *

"""
这里是当前项目的开发环境
"""

ALLOWED_HOSTS = ['*']

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app.change.apps.ChangeConfig',
    'rest_framework'
]

LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'Asia/Shanghai'

STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'), ]
  • Django 仅在调试模式下(DEBUG=True)能对外提供静态⽂件
  • 当DEBUG=False⼯作在⽣产模式时,Django不再对外提供静态⽂件
  • 需要是⽤collectstatic命令来收集静态⽂件并交由其他静态⽂件服务器来提供

路由命名与reverse反解析(逆向)

路由命名

在定义路由的时候,可以为路由命名,⽅便查找特定视图的具体路径信息

  • 在使⽤include函数定义路由时,可以使⽤namespace参数定义路由的命名空间
    • 命名空间表示,凡是users.urls中定义的路由,均属于namespace指明的users名下
    • 命名空间的作⽤:避免不同应⽤中的路由使⽤了相同的名字发⽣冲突,使⽤命名空间区别开
url(r'^users/', include('users.urls', namespace='users')),
  • 在定义普通路由时,可以使⽤name参数指明路由的名字,如
urlpatterns = [
url(r'^index/$', views.index, name='index'),
url(r'^say', views.say, name='say'),
]

reverse反解析

  • 使⽤reverse函数,可以根据路由名称,返回具体的路径
    • 对于未指明namespace的,reverse(路由name)
    • 对于指明namespace的,reverse(命名空间namespace:路由name)
from django.urls import reverse # 注意导包路径

def index(request):
    return HttpResponse("hello the world!")

def say(request):
    url = reverse('users:index') # 返回 /users/index/
    print(url)
    return HttpResponse('say')

路径结尾斜线/

Django中定义路由时,通常以斜线/结尾,其好处是⽤户访问不以斜线/结尾的相同路径时,Django会把⽤户重定向到以斜线/结尾的路径上,⽽不会返回404不存在

urlpatterns = [
    url(r'^index/$', views.index, name='index'),
]
  • ⽤户访问 index 或者 index/ ⽹址,均能访问到index视图
    • 虽然路由结尾带/能带来上述好处,但是却违背了HTTP中URL表示资源位置路径的设计理念。
    • 是否结尾带/以所属公司定义⻛格为准

请求与响应

Request请求

  • 未命名参数按定义顺序传递, 如
url(r'^weather/([a-z]+)/(\d{4})/$', views.weather),

def weather(request, city, year):
    print('city=%s' % city)
    print('year=%s' % year)
    return HttpResponse('OK')
  • 命名参数按名字传递,如
url(r'^weather/(?P<city>[a-z]+)/(?P<year>\d{4})/$', views.weather),

def weather(request, year, city):
    print('city=%s' % city)
    print('year=%s' % year)
    return HttpResponse('OK')

Response响应

  • HttpResponse
    • content:表示返回的内容
    • status_code:返回的HTTP响应状态码
from django.http import HttpResponse

def demo_view(request):
    return HttpResponse('itcast python', status=400)
或者
    response = HttpResponse('itcast python')
    response.status_code = 400
    response['Itcast'] = 'Python'
    return response
  • JsonResponse
    • 帮助我们将数据转换为json字符串
    • 设置响应头Content-Type为 application/json
from django.http import JsonResponse

def demo_view(request):
    return JsonResponse({'city': 'beijing', 'subject': 'python'})

redirect重定向

from django.shortcuts import redirect

def demo_view(request):
    return redirect('/index.html')
  • Cookie以键值对的格式进⾏信息的存储
  • Cookie基于域名安全,不同域名的Cookie是不能互相访问的
  • 当浏览器请求某⽹站时,会将浏览器存储的跟⽹站相关的所有Cookie信息提交给⽹站服务器
  • 设置Cookie
def demo_view(request):
    response = HttpResponse('ok')
    response.set_cookie('itcast1', 'python1') # 临时cookie
    response.set_cookie('itcast2', 'python2', max_age=3600) # 有效期⼀⼩时
    return response
  • 读取Cookie
def demo_view(request):
    cookie1 = request.COOKIES.get('itcast1')
    print(cookie1)
    return HttpResponse('OK')

session

配置

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"

操作

  • 以键值对的格式写session:request.session['键']=值
  • 根据键读取值:request.session.get('键',默认值)
  • 清除所有session,在存储中删除值部分:request.session.clear()
  • 清除session数据,在存储中删除session的整条数据:request.session.flush()
  • 删除session中的指定键及值,在存储中只删除某个键及对应的值:del request.session['键']
  • 设置session的有效期:request.session.set_expiry(value)
  • 如果value是⼀个整数,session将在value秒没有活动后过期。
  • 如果value为0,那么⽤户session的Cookie将在⽤户的浏览器关闭时过期。
  • 如果value为None,那么session有效期将采⽤系统默认值,默认为两周,可以通过在settings.py中设置SESSION_COOKIE_AGE来设置全局默认值
0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区