python之django基础

系列文章目录

第一章 python之初识django框架
第一章 python之熟悉django框架



前言

Django是一个使用Python编写的开源Web应用框架,它提供了一套高效、灵活和安全的工具和功能,用于快速开发Web应用程序。以下是一些值得注意的方面:

MVC模式:Django遵循MVC(Model-View-Controller)模式,将应用程序分为模型(Model)、视图(View)和控制器(Controller)三个组件。模型表示应用程序的数据结构和数据库访问逻辑,视图是处理用户请求和生成响应的代码,而控制器处理路由和请求分发。

ORM(对象关系映射):Django提供了强大的ORM功能,使开发者可以使用Python代码而不是SQL语句来操作数据库。通过定义模型类和字段,Django可以自动创建数据库表、执行查询和更新操作,大大简化了与数据库的交互。

URL配置:Django使用URL配置来将请求映射到合适的视图函数。URL配置基于正则表达式,可以通过URL模式匹配来调用相应的视图函数。

视图函数:视图函数是处理用户请求的代码,它接收HTTP请求作为输入,生成HTTP响应作为输出。视图函数可以返回HTML、JSON、XML等格式的响应,还可以进行数据库操作、权限验证等。

模板引擎:Django提供了强大的模板引擎,用于将数据和逻辑与HTML模板分离。模板引擎可以使用变量、循环、条件语句等功能来动态生成HTML内容,使开发者可以更方便地管理和渲染页面。

表单处理:Django提供了丰富的表单处理功能,可以用于验证用户输入、生成表单HTML代码,并处理表单提交的数据。开发者可以使用Django提供的表单类来简化表单处理过程。

用户认证和授权:Django集成了用户认证和授权功能,可以轻松实现用户注册、登录、注销等功能。开发者可以使用Django的内置用户模型和认证系统,也可以自定义用户模型和认证后端。

中间件:Django中间件是一种可重用的组件,用于在请求和响应过程中执行一些通用的功能。中间件可以处理请求、修改响应、处理异常等,是Django中实现全局和应用级别功能的一种机制。

路由和视图装饰器:Django使用路由机制将请求映射到相应的视图函数。可以使用URLconf配置URL路由规则,也可以使用装饰器自定义视图函数的行为。

静态文件处理:Django提供了静态文件处理功能,可以自动处理CSS、JavaScript、图片等静态文件的收集、压缩、缓存等操作。


一、django轻量版

在这里插入图片描述
在这里插入图片描述

二、 项目目录

分散的app
在这里插入图片描述
放在一个apps下
在这里插入图片描述


三、基础知识点

  • 路由
  • 视图
  • 模板
  • 静态文件和媒体文件
  • 中间件 先不管
  • ORM(时间) 先不管

流程图
在这里插入图片描述

路由

  • int,整数
  • str,字符串 /
  • nid
  • slug,字母+数字+下滑线±
  • uuid,uuid格式
  • path,路径,可以包含 /

1
app01.views
编写视图函数

from django.shortcuts import render
from django.shortcuts import HttpResponse


# Create your views here.
def home(request):
   return HttpResponse("首页")


def books(request, nid):
   print(nid)
   page = request.GET.get("page")
   return HttpResponse("图书")


def article(request):
   nid = request.GET.get("nid")
   print(nid)
   return HttpResponse("文章详情")


def user(request,xid,yid):
   print(xid)
   print(yid)
   return HttpResponse("用户")
  

2
crm.urls
编写总路由

from django.urls import path, re_path
from app01 import views

urlpatterns = [
    path('home/', views.home),
    # books/路径/edit/
    path('books/<path:nid>/edit/', views.books),
    path('article/', views.article),
    # /user/字母或数字-数字/数字/
    re_path(r'user/(?P<xid>\w+-\d+)/(?P<yid>\d+)/', views.user),
]

3
激活虚拟环境
建议打开项目就激活虚拟环境
运行程序
python manage.py runserver

4
访问
运行程序后出现的网址
测试绑定路由关系是否返回视图函数对应的返回信息
在这里插入图片描述
例如:
在这里插入图片描述

路由分发

总共100个功能 = 用户有30个+ 其他有70个,就可以做一个路由分发
inlucde + app(一般),将功能拆分不到不同的app中
这里我们再创建两个,api和web
在每个app里面创建一个urls.py,直接先复制总路由的模板
在这里插入图片描述
1
先编写视图函数
web/views.py
在这里插入图片描述>api/views.py
在这里插入图片描述
2
编写子路由和总路由
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
3
访问
依次访问每个路由下是否返回了对应的路由内容
在这里插入图片描述
例如:
注意有无斜杠的区别/在这里插入图片描述


手动路由分发
创建一个app02,在里面操作
编写子路由
app02/url.py
在这里插入图片描述

编写总路由 加
在这里插入图片描述
访问,对比这几种方式,都可以访问到,以后根据需求自己在这里插入图片描述

本质

  • URL对应函数

    path('user/add/', views.login),
    
  • URL对应元组

    path('user/add/',    (元素,appname元素,namespance元素)    ),
    
    path('user/add/',    include("apps.api.urls")    ),
    path('user/add/',     ([],None,None)     ),
    

name

创建一个app03
在总路由中绑定视图函数
在这里插入图片描述
视图函数中反向基于name反向生成
在这里插入图片描述
编写html 中反向生成
在app03下创建templates文件夹并创建login.html
在这里插入图片描述

namespace

辅助name的
编写api和web总路由
在这里插入图片描述
编写api和web子路由
添加这句在子路由中 app_name = “api”
在这里插入图片描述

在这里插入图片描述

视图函数反向生成
在这里插入图片描述
html中反向生成
在这里插入图片描述
访问,观察终端的打印信息
在这里插入图片描述

name对于权限的应用

游客,具有一些权限。 permissions = [“register”,“login”,‘home’]
登录用户,具有更多权限。 permissions = [“register”,“login”,‘home’,'‘get’,‘logout’]
管理员,具有所有权限。 permissions = [“register”,“login”,‘home’,‘get’,‘delete’,‘update’,‘add’]
在这里插入图片描述


视图

单文件 之前就是一个views.py
变成文件夹,view,后续根据不同的业务功能编写多个视图文件
视图参数:

    print(request)
    print(request.path)
    print(request.GET)
    print(request.resolver_match)

<WSGIRequest: GET '/app02/login'>
/app02/login
<QueryDict: {}>
ResolverMatch(func=app02.views.login, args=(), kwargs={}, url_name=None, app_names=[], namespaces=[], route=app02/login)

返回值

  • HttpResponse
  • JsonResponse
  • render
  • redirect
from django.shortcuts import HttpResponse, redirect, render
from django.http import JsonResponse


def auth(request):
    pass


def login(request):
    # 1.获取请求数据
    print(request)

    # 2.根据请求数据进行条件的判断 GET/POST   GET.get("xx")    POST.get("xx")

    # 3.返回数据

    # 3.1 字符串/字节/文本数据(图片验证码)
    # return HttpResponse("login")

    # 3.2 JSON格式(前后端分离、app小程序后端、ajax请求)
    # data_dict = {"status": True, 'data': [11, 22, 33]}
    # return JsonResponse(data_dict)

    # 3.3 重定向
    # return redirect("https://www.baidu.com")
    # return redirect("http://127.0.0.1:8000/api/auth/")
    # return redirect("http://127.0.0.1:8000/api/auth/")
    # return redirect("/api/auth/")
    # return redirect("/api/auth/")  # name
    #
    # from django.urls import reverse
    # url = reverse("auth")
    # return redirect(url)  # name
    # return redirect("auth")

    # 3.4 渲染
    # - a.找到 'login.html' 并读取的内容,问题:去哪里找?
    # -   默认先去settings.TEMPLATES.DIRS指定的路径找。(公共)
    # -   按注册顺序每个已注册的app中找他templates目录,去这个目录中寻找'login.html'
    # -   一般情况下,原则,那个app中的的模板,去哪个那个app中寻找。
    # - b.渲染(替换)得到替换完成的字符串
    # - c.返回浏览器
    return render(request, 'api/login.html')

响应头

from django.shortcuts import HttpResponse, redirect, render
from django.http import JsonResponse


def login(request):
   res = HttpResponse("login")
   # 设置值
   res['xx'] = "xx"
   res['name'] = "蜡笔小新"
   res['xxx'] = "2rfafsggegq"
   #设置值
   res.set_cookie('k1',"aaaaaaaa")
   res.set_cookie('k2',"bbbbbb")

   return res
  

在这里插入图片描述

静态资源

静态文件

  • css、js、图片

    • 创建static 根目录的 /static/
    • 或者app目录下 /static/ app名称/文件夹
  • 媒体文件:用户上传的数据(excel/pdf/video)

    • 创建media 根目录的 /media/
  • settings中注册信息 settings.py

STATIC_URL = '/static/'
STATICFILES_DIRS = (
   os.path.join(BASE_DIR, 'static'),
)

  • 在html中尽量用反向生成
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>登录页面</h1>
<a href="/xxx/xxxxx/"> xx</a>
<a href="{% url 'login' %}">跳转</a>

<img src="{% static 'api/1.png' %}">

</body>
</html>

媒体文件

  • 总路由上加
from django.conf.urls.static import static
from django.conf  import settings
urlpatterns = [
     
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

总结

记住上面那张流程图,大致的流程就是这样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值