Django学习总结笔记

    技术2022-07-10  161

    创建一个项目 底下会出现一个相同名的Python包 manage.py:是每个Django项目中自动生成的一个用于管理项目的脚本文件,需要通过python命令执行。 _ init _.py: 一个空文件,告诉 Python 该目录是一个 Python 包。 settings.py: 该 Django 项目的设置/配置。 urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。 wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。views里写自己要写的函数 即前端里要返回的内容 Httpresponse()里写的是直接返回的内容 把HTML直接放在括号内 返回普通字符串 URLs里path 放的是浏览器地址栏的路径 即127.0.0.1:8000/ 路径名 写的就是views里的 前面可随便命名 后面必须要加个\ ,后面要是views里的函数 没有括号() 正则表达式不是用path,要用re_path,需要导模块前端页面->后台程序->返回结果->前端页面 请求到返回结果的过程MVC 全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码。 M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。 MTV模式 Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django的MTV分别是值: **M 代表模型(Model):**负责业务对象和数据库的关系映射(ORM)。 T 代表模板 (Template):负责如何把页面展示给用户(html)。 V 代表视图(View):负责业务逻辑,并在适当时候调用Model和Template。 Django中提供了View组件用来充当MVC中的C-controller。把HTML的代码放在py文件中不好 不是用来写前端的 需要把它抽离出来 放在templates模板 里 在里面直接写前端代码 template是在项目的根目录下 不需要自己建 6.在浏览器中显示 需要改两个东西 views里 要用render()渲染函数 里面的参数第一个是request 第二个就是template里的HTML文件 需要带后缀 返回模板文件MVC中的v是界面 MTV中的t 是界面 中的v是业务逻辑的 MVC和MTV没有本质上的区别将一个项目划分成很多个功能模块 一个模块就是一个APP views.py是表示业务逻辑的 每个模块都有表示自己业务逻辑的文件 即每个APP都有一个views 模块化开发 在terminal里输入 Python manage.py start app名 创建一个APP 9.正则配合 d{1,3}表示1到3位整数 w+表示字母数字下划线 一般表示模糊匹配 前面加^后面$ 表示精确匹配 10.命名路径转换器 只要可以转成规定的类型就不会报错(404) 命名路径 的目的是获取URL的参数值 正则路径 在正则表达式前加?P<参数> 和正则表达式整个括起来 可以捕获参数 11.get接收参数 通过前端一个请求(a button 表单三种)发送给view函数的参数方式 : 前端里通过 ?参数1=多少&参数二=多少 发送 view中通过request.GET【“参数名”】 获得 这是最常规的方法 传统的方法是函数形参的方式 函数名(request,参数1,参数2) 常规的比传统的好 如果不想GET中参数报错,可以用GET.get(“参数”,“默认值”) 当找不到参数时会使用默认值 a标签和button都是通过在路径后加 ?参数1=多少&参数二=多少 这种方式表单不需要 你在表单中输入值之后 浏览器中的URL会自动拼接上 a button需要自己输参数 在GET.get中写参数 表单中name值 就获得了参数值 注意 将敏感信息如密码用** method要用post而不是get 在表单里加{% csrf_token %}会解决报错的问题 要正确的输出值,view中也要用POST而不是GETNo changes detected 不是报错 是没有做出改变或非需要用到Q()函数 与不需要用 或用| 非用~ row-sql 使用原生的sql语句 输出时是一个queryset 需要 用list 或者for遍历输出其具体结果 14.on_delete=models.CASCADE级联删除 如一个类别删除了 这个类别下面的商品也被删了 只有一对一有 多对多不能有
    Processed: 0.009, SQL: 9