0
点赞
收藏
分享

微信扫一扫

Django全栈

五殳师兄 2022-04-06 阅读 73
django

Django

一、创建项目 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结构

处理URL请求

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 = "<h1>第一个页面</h1>"
    return HttpResponse(html)

URL -> 主路由path ->函数(from.import views) -> 编写函数

path()函数

path转换器

#path('page/<int:page>',views.xxx)
#http://127.0.0.1:8000/page/(int)

#urls.py:
path('page/<int:pg>',views.pagen_view)
path('<int:n>/<str:op>/<int:m>',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<x>\d{1,2})/(?P<op>\w+)/(?P<y>\d{1,2})$',views.cal2_view)

#其他与上面相同

URL拼写规则

反向解析

#在模板中

{% url '别名'%}

{% url '参数' age='18' %}

#在视图中

from django.urls import reverse

def test_url(request):    
    url = reverse('base_index')

    return HttpResponseRedirect(url)

三、请求与响应

请求

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 <QueryDict:{'a':['1']}>
#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

键入注册信息

十、关系映射

十一、cookies和session

十二、缓存

十三、中间件

十四、分页

十五、生成csv文件

十六、内建用户系统

十七、文件上传

十八、发送邮件

十九、项目部署

uwsgi

nginx

举报

相关推荐

0 条评论