Django基础

简介

  • Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。
  • Django是一个开放源代码的Web应用框架,由Python写成。
  • Django遵守BSD版权,初次发布于2005年7月, 并于2008年9月发布了第一个正式版本1.0 。
  • Django采用了MVC的软件设计模式,即模型M,视图V和控制器C。

MVC和MTV模式

所有WEB模式通用

MVC模式

常用模式

把web应用氛围模型(M),控制器(C),视图(V)三层,以类似插件松耦合的方式连接在一起

  • Model(模型):负责业务对象与数据库的对象(ORM)
  • View(视图):负责与用户的交互【HTML页面】
  • Controller(控制器):负责接收用户的输入调用模型和视图完成用户请求

MTV模式

非类Django无此模式

MTV模式和MVC模式本质无差,定义不同

  • Model(模型):负责业务对象与数据库的对象(ORM)
  • Template(模版):负责如何把页面展示给用户
  • View(视图):负责业务逻辑,并在适当的时候调用Model和Template【视图函数】

django项目

创建django项目

django-admin startproject Mydjango

django默认项目架构

Mydjango                #项目名称
    manage.py               #项目启动管理
    Mydjango                #项目全局应用名称
        templates           #自添加目录用于存放html模版
        settings.py         #全局应用配置信息
        urls.py             #全局url关联视图函数
        wsgi.py

创建django项目应用

cd Mydjango
python manage.py startapp APP

项目应用架构

APP
    admin.py        #后台管理系统
    apps.py         #项目中的应用
    migrations      #数据库变更文件
    models.py       #操作数据库用
    tests.py        #测试用
    views.py        #视图函数

启动django项目

python manage.py runserver

配置文件

settings.py

在全局应用配置文件中添加项目应用

vim Mydjango/Mydjango/settings.py
INSTALLED_APPS

INSTALLED_APPS中添加项目应用

'APP',
TEMPLATES

TEMPLATES 中添加路径,templates为html存放位置

'DIRS': [os.path.join(BASE_DIR,'templates')],
STATIC

访问别名,添加静态文件路径,用于存放静态文件

STATIC_URL = '/static/'

STATICFILES_DIRS=(
    os.path.join(BASE_DIR,"static"),
    )
HttpResponse模块

新增测试函数[引入HttpResponse模块用于测试]

from django.shortcuts import HttpResponse

# Create your views here.

def Hello_APP(requset):
    return HttpResponse("Hello Django")

也可以用render模块访问文件测试【render返回的也是HttpResponse对象】

from django.shortcuts import render

# Create your views here.

def Hello_APP(requset):
    return render(requset,"index.html")

Django URL路由系统

urls.py

用法示例

==注意要以,号结尾==

path模块-普通用法

urlpatterns = [path(路径,views视图函数,参数,别名),]

re_path模块-正则用法

urlpatterns = [re_path(含正则表达式路径,views视图函数,参数,别名),]

参数说明
  • 一个正则表达式字符串
  • 一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
  • 可选的要传递给视图函数的默认参数(字典形式)
  • 一个可选的 name 参数
  • 后跟views视图函数可以是FBV也可以是CBV
综合示例
vim Mydjango/Mydjango/urls.py
from APP import views
#引入项目应用函数模块
from django.urls import path,re_path
#引入urls path模块和re_path模块

urlpatterns = [
    path('admin/', admin.site.urls),                        #系统默认
    path('APP/', views.Show_time),                         #普通URL应用
    path('login/', views.User_login,name="reg"),            #普通URL应用,启用别名
    re_path(r'article/(\d{4})',views.Article_txt),          #带正则表达式url应用【无命名分组】
    re_path(r'article/(?P<id>[a-z]{4})',views.Title_txt),   #带正则表达式url应用【命名分组】
]

views 视图函数

http请求中产生两个核心对象:

  • http请求:HttpRequest对象
  • http响应:HttpResponse对象

views视图函数的类别

类别形式
FBV函数形式
CBV类形式

检测方法:isinstance(request,HttpRequest)

HttpRequest对象

request 可用简写为 req

  • 请求以字符串形式发送,分请求头和请求体
  • get 的url形式发送,请求头传输数据,请求体无传输数据,是空的
  • post 形式发送,请求头和请求体都可以传数据
参数释义
request.path请求页面的全路径,不包含域名
request.session唯一可读写的属性,代表当前会话的字典对象
request.method请求中使用的HTTP方法的字符串,全大写表示
request.userdjango.contrib.auth.models.User对象,代表当前登录用户
GET包含所有HTTP GET参数的类字典对象
POST包含所有HTTP POST参数的类字典对象
FILES包含所有上传文字的类字典对象
COOKIES包含所有COOKIES的标准Python字典对象;keys和values都是字符串

==扩展:提交方式除了常见的get和post,还有put,patch,delete,head,options,trace等,但form只能使用post和get,扩展提交方式 AJAX 中可以使用==

在响应体中添加响应头信息

def post(self,request):
    ret = HttpResponse('TEXT')
    ret = ['Newtext'] = 'Newtext'
    #反馈给用户 响应头 Newtext=Newtext,响应体 TEXT
    ret.set_cookie('c1','v2')
    #响应头中加入cookies c1=v2 信息
    return ret

method说明

if req.method=="GET":
    代码块或函数
elseif  req.method=="POST":
    代码块或函数

path说明

request.path            | 请求页面的全路径,不包含域名,不包含提交数值
request.get_full_path() | 请求页面的全路径,不包含域名,包含提交数值

POST说明

  • 服务器收到的POST请求的情况也是可能发生的,表单form通过HTTP POST方法请求,但表单中可能没有数据
  • 因此不能使用if req.POST来判断是否使用了HTTP POST方法
  • 应该使用 if req.method=="POST"

FILES说明

  • 标签中每一个 key 都是<input type="file" name=""/>中name属性的值
  • 标签中每一个 value 都包含filename(上传文件名)、content_type(上传文件的内容类型)、content(上传文件的原始内容)

user说明

  • 如果用户没有登录,user将被初始化为 django.contrib.auth.models.AnonymousUser 的实例
  • 通过 user 的 is_authenticated() 方法判别用户是否登录
  • if req.user.is_authenticated() 只有激活 Django 的 AuthenticationMiddleware 时该属性才可用

HttpResponse对象

HttpResponse对象需要自己创建,每个view视图请求处理方法必须返回一个HttpResponse对象

方法
方法释义
render()页面渲染【推荐】
reder_to_response()页面渲染
redirect("路径")页面跳转
locals()可以直接将函数中所有的变量传给模版

==如果前端带标签代码,如<a></a>被页面安全机制拦截,无渲染效果,可以使用{{NAME|safe}}来进行渲染==

FBV(函数形式)示例:

页面渲染示例

path('admin',views.test),
def test():
    return render(request,"index.html")
    或
    return render_to_response("index.html")

页面跳转示例

path('admin',views.test.as_view()),
def test():
    return redirect("https://www.djangoproject.com/")
    或
    return redirect("/admin")
CBV(类形式):
from django.vies import View
class 类名(View):
    def dispatch(self,request,*args,**kwargs):
        result = super(类名,self).dispatch(self,request,*args,**kwargs)
        return result
    def get(self,request):
        return 返回值
    def post(self,request):
        return 返回值

转载于:https://my.oschina.net/zhaojunhui/blog/1934172

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值