Django学习(一)

一、创建项目应用

目录

一、创建项目应用

启动项目【测试开发阶段】

Settings.py

BASE_DIR

DEBUG

ALLOWED_HOSTS

INSTALLED_APPS

MIDDLEWARE

TEMPLATES

DATABASES

LANGUAGE_CODE

TIME_ZONE

ROOT_URLCONF

二、URL和视图函数

Django如何处理URL请求

三、路由配置-path

path()函数

Path转换器

路由配置 re_path()函数

四、请求和响应

请求和响应

GET请求和POST请求

GET

POST

Django的设计模式及模板层

模板层-变量和标签

模板层-过滤器和继承

url反向解析


启动项目【测试开发阶段】

django-admin startproject myapp(应用名称)

  1. 终端cd到项目文件夹 cd my_django
  2. 进入到项目文件夹后,执行python manage.py runserver 启动django服务【注:该启动方式下,django在前台启动服务,默认监听8000端口】【linux环境用python3】
  3. 浏览器访问http://127.0.0.1:8000 可看到django的启动页面

【注:如果更换端口,可用python manage.py runserver 端口号】

db.sqlite3:sql文件,后续用mysql替代;

my_django/my_django:项目同名文件夹;

__init__.py:python包初始化文件;

Wsgi.py:web服务网关的配置文件-Django正式启动时,需要用;

Urls.py:项目的主路由配置-http请求进入django时,优先调用该文件;

Settings.py:项目的配置文件-包含项目启动时需要的配置;

manage.py 包含项目管理的子命令,比如:

  1. python manage.py runserver 启动服务
  2. python manage.py startapp 创建应用
  3. python manage.py migrate 数据库迁移

   直接执行python manage.py 可列出所有django子命令

Settings.py

它包含了django项目启动的所有配置项

配置项氛围公有配置和自定义配置

配置项格式例:BASE_DIR =’XXXX’ 【BASE_DIR必须大写】

公有配置 – django官方提供基础配置:https://docs.djangoproject.com/en/2.2/ref/settings/

BASE_DIR

用于绑定当前项目的绝对路径(动态计算出来的),所有文件夹都可以依赖此路径

from pathlib import Path

# Build paths inside the project like this: BASE_DIR / 'subdir'.
# 项目绝对路径
BASE_DIR = Path(__file__).resolve().parent.parent

DEBUG

用于配置django项目的启动模式,取值:

True表示开发环境中使用,开发调试模式(用于开发中)

False表示当前项目运行在生产环境中

# SECURITY WARNING: don't run with debug turned on in production!

DEBUG = True

# 启动模式
# True - 调试模式
# 1.检测代码改动后,立刻重启服务
# 2.报错页面
# False - 正式启动模式/上线模式

ALLOWED_HOSTS

设置允许访问到本项目的host头值

[]空列表,表示只有请求头中host为127.0.0.1,localhost能访问本项目-DEBUG=True时有效;

[‘*’],表示任何请求头的host都能访问该项目;

[‘192.168.1.3’,’127.0.0.1’],表示只有当前两个host头的值能访问该项目。

# 过滤请求头HOST头 ALLOWED_HOSTS = ['127.0.0.1'] ['*']
ALLOWED_HOSTS = []

INSTALLED_APPS

指定当前项目中安装的应用列表

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

MIDDLEWARE

用于注册中间件

# 中间件
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',
]

TEMPLATES

用于指定模板的配置信息

# 模板

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',
            ],
        },
    },
]

DATABASES

用于指定数据库的配置信息

# Database
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

LANGUAGE_CODE

用于指定语言配置,英文:”en-us” 中文:”zh-Hans”

LANGUAGE_CODE = 'en-us'  # 'zh-Hans'

TIME_ZONE

用于指定当前服务器端时区,世界标准时间:”UTC”,中国时区:”Asia/Shanghai”

TIME_ZONE = 'UTC'  # 'Asia/Shanghai'

ROOT_URLCONF

用于配置住url配置’my_django.urls’,ROOT_URLCONF=’my_django.urls’

# 主路由
ROOT_URLCONF = 'my_django.urls'

二、URL和视图函数

URL:统一资源定位符uniform resource locator,用来表示互联网某个资源的地址

一般语法格式:[代表其中的内容可省略]

Protocol://hostname[:port]/path[?query][#fragment]

协议-主机名-端口号-路由地址-查询-信息片段/锚点[html方便元素定位]

Django如何处理URL请求

浏览器地址栏输入http://127.0.0.1:8000/page/2003/

  1. django从配置文件settings.py中根据ROOT_URLCONF找到主路由文件;默认情况下,该文件在项目同名目录下的urls;例如my_django/my_django/urls.py
  2. django加载主路由文件中的urlpatterns变量[包含很多路由的数组]
  3. 依次分配urlpatterns中的path,匹配到第一个合适的且中断后续匹配
  4. 匹配成功-调用对应的视图函数处理请求,返回相应
  5. 匹配失败-返回404响应

视图函数是用于接收一个浏览器请求(HttpRequest对象)并通过HttpResponse对象返回响应的函数。此函数可以接收浏览器请求并根据业务逻辑返回相应的响应内容给浏览器

语法:

def xxx_view(request[,其它参数…]):

         return HttpResponse对象

样例:

# file:<项目同名文件下>/views.py
from django.http import HttpResponse
def page1_view(request):
         html = “<h1>这是第1个页面</h1>”
         return HttpResponse(html)

三、路由配置-path

path()函数

导入-from django.urls import path

语法-path(route,views,name=None)

参数:

Route:字符串类型,匹配的请求路径

Views:指定路径所对应的视图处理函数的名称【注:函数后面不能加(),引用的是函数,而不是函数的结果】

Name:为地址起别名,在模板中地址反向解析时使用

Path转换器

语法:<转换器类型:自定义名>

作用:若转换器类型匹配到对应类型的数据,则将数据按照关键传参的方式传递给视图函数

例:path(‘page/<int:page>’,views.xxx)

urls.py

urlpatterns = [
    # 计算器http://127.0.0.1:8000/整数/运算符/整数
    path('<int:left>/<str:op>/<int:right>', views.page_calculate),
]

views.py

def page_calculate(request,left,op,right):
    if op == "add":
        result = left+right
    elif op == "sub":
        result = left-right
    elif op == "mul":
        result = left*right
    else:
        return HttpResponse("Your op is wrong!")
    return HttpResponse("这是我设计的计算器,结果为%s" %(result))

路由配置 re_path()函数

在url的匹配过程中可以使用正则表达式进行精确匹配

语法:

re_path(reg,view,name==xxx)

正则表达式为命名分组模式(?P<name>pattern);匹配提取参数后用关键字传参方式传递给视图函数

urls.py

urlpatterns = [
    # 路由一:http://127.0.0.1:8000/birthday/四位数字/一到两位数字/一到两位数字 年月日
    # 路由二:http://127.0.0.1:8000/birthday/一到两位数字/一到两位数字/四位数字 月日年
    # 最终输出:生日为:xxxx年xx月xx日
    re_path(r'^birthday/(?P<year>\d{4})/(?P<month>\d{1,2})/(?P<day>\d{1,2})$', views.birthday_cal1),
    re_path(r'^birthday/(?P<m>\d{1,2})/(?P<n>\d{1,2})/(?P<year>\d{4})$', views.birthday_cal2),
]

views.py

def birthday_cal1(request,year,month,day):
    html_birthday_cal1 = "生日为:%s年%s月%s日"%(year,month,day)
    return HttpResponse(html_birthday_cal1)


def birthday_cal2(request,m,n,year):
    html_birthday_cal2 = "生日为:%s年%s月%s日"%(year,m,n)
    return HttpResponse(html_birthday_cal2)

四、请求和响应

请求和响应

-请求是指浏览器端通过HTTP协议发送给服务器端的数据

-响应是指服务器端接收到请求后做相应的处理后再回复给浏览器端的数据

GET请求和POST请求

无论是GET还是POST,统一都由视图函数接收请求,通过判断request.method 来区分具体的请求操作。

GET

GET请求动作,一般用于向服务器获取数据

能够产生GET请求的场景:

-浏览器地址栏输入URL回车

-a标签的超链接<a href=”地址?参数=值&参数=值”>

-form表单中的method为get【一般较少使用】

print(request.GET ['参数名']) # QueryDict

print(request.GET.get['a'])

print(request.GET.get('c','there is no c'))

print(request.GET.getlist('a'))

POST

POST请求动作,一般用于向服务器提交大量/隐私数据

客户端通过表单等POST请求将数据传递给服务器端,如:

<form method=’post’ action=”/login”>
         姓名:<input type=”text” name=”username”>
         <input type=’submit’ value=’登录’>
</form>

服务端接收参数

         通过request,method来判断是否为POST请求,如

         If request.method == ‘POST’:

                   处理POST请求的数据并响应

         else:

                   处理非POST请求的响应

print(request.POST['a']) #request.POST绑定questyDict

print(request.POST.get('c','there is no c'))

print(request.POST.getlist('b'))

# 取消csrf跨站伪造验证,否则django将会拒绝客户端发来的请求,报403响应

禁止掉settings.py中MIDDLEWART中的CsrfViewsMiddleWare的中间件

# 中间件

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',
]

Django的设计模式及模板层

MVC和MTV

模板配置

模板的加载方式

视图向模板传递变量

模板层-变量和标签

模板层-过滤器和继承

url反向解析

....##待续##...

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值