当前位置: 首页 > article >正文

【Django5】练习

Django学习

    • 功能快捷键
    • FLowchart流程图
  • Django5
    • Django基础知识
      • 下载
      • 启动Django
      • urls
      • DTL
        • 表达式
        • 过滤器
        • include
        • block
        • extends

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法1 功能;
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表2 功能。

功能快捷键

撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G

H2O is是液体。

210 运算结果是 1024.

- 关于 **甘特图** 语法,参考 [这儿][2],

## UML 图表

可以使用UML图表进行渲染。 [Mermaid](https://mermaidjs.github.io/). 例如下面产生的一个序列图:

```mermaid
sequenceDiagram
张三 ->> 李四: 你好!李四, 最近怎么样?
李四-->>王五: 你最近怎么样,王五?
李四--x 张三: 我很好,谢谢!
李四-x 王五: 我很好,谢谢!
Note right of 王五: 李四想了很长时间, 文字太长了<br/>不适合放在一行.

李四-->>张三: 打量着王五...
张三->>王五: 很好... 王五, 你怎么样?

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.3.0 开始 我的操作 确认? 结束 yes no
  • 关于 Flowchart流程图 语法,参考 这儿.

Django5

Django基础知识

下载

  • 下载PythonDJango5只支持3.10以上版本,比如下载3.12版本
  • 可以从python官网下载安装,也可以pycharm安装,但是pycharm安装要新建两次项目。(第一次安装python,然后安装Django,第二次才能初始化出来Django文件结构)
  • 安装DJango
pip install django==5.0.3
pip install pymysql
pip install mysqlclient
django-admin startproject projectName
##或者使用pycharm创建:

创建项目

启动Django

python .\manage.py runserver
#或者直接pycharm运行,效果一样

在这里插入图片描述
django结果

  • manage.py:项目交互 python manage.py [子命令/help]
  • settings.py:配置,比如数据库、跨域
  • urls.py:项目所有url
  • wsgi.py:部署项目
  • project和app,一个app一个模块,所有模块放到django项目里面
    • 通过命令python manage.py startapp appName创建app
      创建app

urls

path(route,view,name,kwargs):
route:
- <int:book_id>指定类型为int且views函数里面类型也是一个整形,不是int会出现404,否则默认为str
- str :非空字符串,不能有/
- int:整形,到view视图函数也是整形
- slug匹配_和-或数字英文字符的字符串,/为分割符号;
- path可以不受限制,匹配非空英文字符串,包括/;
- uuid:匹配非空英文字符,包括/
view:返回response函数 ,可以是视图函数、类视图.as_view()、django.urls.include()(include("movie.urls"))函数返回值
name:url取名字,项目大、url多的时候用,可以反向得到路由,一定要写app_name

  • /book/2
# /项目名/项目名/urls.py
path("book/<book_id>",views.book_detail_path)
#项目名/book模块/views
def book_detail_path(request,book_id):
    return HttpResponse(f"id为{book_id}")#id为2
  • /book?id=2&name=活着
# /项目名/项目名/urls.py
 path("book",views.book_detail_query_string),
#项目名/book模块/views
def book_detail_query_string(request):
    book_id=request.GET.get('id') #找不到id不会抛异常['id']会
    name=request.GET.get('name')
    return HttpResponse(f"id为{book_id},名称为{name}") #id为2,名称为活着
  • 结合:/book/str/12
# /项目名/项目名/urls.py
  path("book/str/<str:book_id>",views.book_str)
#项目名/book模块/views
def book_str(request,book_id):
    return HttpResponse(f"id为{book_id}") #id为12
  • slug:/book/slug/12-1
# /项目名/项目名/urls.py
  path("book/slug/<str:book_id>",views.book_slug),
#项目名/book模块/views
def book_slug(request,book_id):
    return HttpResponse(f"id为{book_id}") #id为12-1
  • path:/book/str/12/1
# /项目名/项目名/urls.py
   path("book/path/<path:book_id>",views.book_path)
#项目名/book模块/views
def book_path(request,book_id):
    return HttpResponse(f"id为{book_id}") #id为12/1
  • path:/movie/detail/12
# /项目名/项目名/urls.py
   path("movie/",include("movie.urls")),
#movie.urls:
from django.urls import path
from . import views
app_name='movie'
urlpatterns=[
    path("list",views.movie_list,name="movie_list"),
    path("detail/<int:movie_id>",views.movie_detail,name="movie_detail"),
]
#movie/views.py
from django.shortcuts import render
from django.http import HttpResponse
from django.template.context_processors import request

def movie_list(request):
    return HttpResponse("电影列表") #电影列表
def movie_detail(request,movie_id):
    return HttpResponse(f"获得的电影id:{movie_id}") #获得的电影id:12
  • 反转,通过name获取地址
    • <name>通过kwargs;
    • request.GET.get通过手动添加;
    • app下的使用appname:name
#任一个views.py
from django.urls import reverse
def index(request):
    print(reverse("index"))# /
    print(reverse("book_detail_path",kwargs={"book_id":1}))# /book/1
    print(reverse("book_detail_query_string")+"?id=1&name=活着") # /book?id=1&name=活着
    print(reverse("book_path",kwargs={"book_id":1}))    # /book/path/1
    print(reverse("movie:movie_list")) #/movie/list
    print(reverse("movie:movie_detail",kwargs={"movie_id":1})) #/movie/detail/1
    return HttpResponse("Hello world")

DTL

一种带有特殊语法的HTML文件,可以被Django编译、传递参数进去,实现数据动态化。编译完成后生成HTML,然后发送到客户端
渲染模板:

  1. html=render_to_string(detail.html)然后return HttpResponse(html)
  2. 直接render:return render(request,'detail.html'),一步到位。
#
# 任一个views.py
from django.shortcuts import render

# Create your views here.
def index(request):
    return render(request,"index.html") #html都在templates里面
  • setting.py

    • BACKEND:templates引擎
    • DIRS:templates,存放模板的路径
    • APP_DIRS:是否允许从app里面找templates/index.html,并且要求INSTALLED_APPS里面添加app
  • 传参

    • json,类和数组都用.多层用多个点
    • 使用context传参
#任一baidu.html
<p>{{username}}</p>
<p>{{ book.name }}</p>
<p>{{ book.id }}</p>
<p>{{qas.0}}</p>
<p>{{qas.1}}</p>
<p>{{qas.2}}</p>
<p>{{qas.2.问题3}}</p>
<p>{{person.name}}</p>
<p>{{person.age}}</p>
# 任一views.py
username = "baidu"
    username = "baidu"
    book={'name':'活着','id':'1'}
    class Person:
        def __init__(self,name,age):
            self.name=name
            self.age=age
    qas=[
        {"问题1":"你是谁"},
        {"问题2":"你要到何处去"},
        {"问题3":"你从何处来"},
    ]
    context={"username":username,"qas":qas,"book":book,"person":Person("张三",19)}
    return render(request,"baidu.html",context=context)
表达式
名称功能
ifif a in b ;elif c==d;else e;endif
forif a in b [reversed];a.c;endfor ;
字典for用items/keys/values都可以;
reversed反向遍历;
{{forloop.counter}}获取索引
counter0从0开始
counter从1开始
revcounter反向到1
revcounter0反向到0
first是否第一个
last是否最后一个
parentloop用上一级的for
emptyfor的东西为空,执行{%empty%}hello
with定义变量{%with a=b%} {{a}} {% endwith %}
url{%url ‘app:视图名’%} 或者{%url ‘index’ %} 根据视图名字反转出url,有参数直接后面传参,字符串需要拼接
#if
{% if "hello" in persons %}
	hello
	
{%else%}
	world
{% endif %}`
#for
<table border="1" align="center">
        <tr align="center">
            <th><p>序列号</p></th>
            <th><p>游戏名称</p></th>
            <th><p>游戏类型</p></th>
        </tr>
{%  for game in games %}
    <tr align="center" >
        <td>{{forloop.counter}}</td>
        <td><p>{{ game.name }}</p></td>
        <td><p>{{ game.type }}</p></td>
    </tr>
    {%empty%}
        <tr align="center" ><p>没有</p></tr>
{%endfor%}
</table>
#url
#/
<a href="{% url 'index' %}">首页</a> #直接视图名
#/home/baidu
<a href="{% url 'home:baidu' %}">百度一下,你就知道</a> #app内用app:视图名
#/book/1
<a href="{% url 'book_detail_path' 1 %}">图书详情</a> #有参数在后面传参
#/book/1
<a href="{% url 'book_detail_path' book_id=1 %}">图书详情</a> #多个参数指定名称
#/book?id=1&name=活着
<a href="{% url 'book_detail_query_string'%}?id=1&name=活着">图书详情</a> #查询字符串需要手动拼接
过滤器

{{value | add:"2"}},参数为:"参数",过滤器为aadd,用|分割

名称功能
add添加参数到value
cut指定字符清除,相当于replace(args,“”)
datedatetime.now() ->date->年/月/日;
Y4位年,m2位月,n可1位月,d两位天,j可1位天
g可1位12时,h2位12时,G可1位24时,H2位24时,i2位分钟,s2位秒
可1位代表1-9没有0前缀
default设置空值/False的默认值
default_if_none设置空值none的默认值
first / last显示列表/元组的第一个元素 / 最后一个元素
floatformat格式化浮点数类型只保留一位小数,小数点后面都是0,保留整数
join将数组或元组根据参数拼接,相当于"/".join(data)
length数组或元组或字典的长度
lower / upper字符全部小写 /大写
random列表/字符串/元组随机选择一个值
safe标记字符串安全,自动解析html
slice切片,相当于python的切片data[1:]
striptags删除html标签
truncatechars超过长度进行切割,切割+拼接三个点作为省略号,…也算3个字符
truncatechars_htmlhtml字符串不切割标签
#cut
{{value| cut:" "}}
#date
 {{value|date:"Y/m/d"}} 
#default
{{value | default:"暂时没有写"}}
#default_if_none
{{value | default_if_none:"暂时没有写,是None"}}
#safe
{{ html | safe }}
#slice
{{ list | slice:"1:"}}
include

include将一些复用模板放到(include)到其他地方
比如header.html里面的内容可以只包含div,和vue的组件一样
传递参数给主模板就可以,子模版直接使用主模板变量
传递参数也可以用with

#将header.html和footer.html放到其他界面
{% include 'header.html' %}
{% include 'footer.html' %}
#传递参数用`with`语句
{% include 'header.html' with username='张三' %}
block

用于填位置

#base.html,有header,body,footer,相当于vue的views/index.vue
<head>
    <meta charset="UTF-8">
    <title>{% block title %}{% endblock %}</title>
    {% block head %}{% endblock %}
</head>
{% block body %}我是base.html的body block{% endblock %}#当有html用extends继承base的时候,可以使用body标签填充这个位置
extends

用于继承,必须放到第一行

#index.html
{% extends 'base.html' %} #继承base.html
{%block title%} #填充base.html的title block
    首页
{%endblock%}
{% block head %}
    <style>
    body{
        background-color: #31a89f;
    }
    </style>
{% endblock %}

{%block body%} #填充base.html的body block
{{ block.super }} #可以继承父的block内容
    hello
    {% include "hotarticle.html" %}
{%endblock%}
{%%}


  1. mermaid语法说明 ↩︎

  2. 检查列表 ↩︎


http://www.kler.cn/a/567326.html

相关文章:

  • MySQL 存储过程详解
  • C#委托(delegate)的常用方式
  • Skywalking介绍,Skywalking 9.4 安装,SpringBoot集成Skywalking
  • 【华为OD机考】华为OD笔试真题解析(16)--微服务的集成测试
  • 【后端开发面试题】每日 3 题(四)
  • 【电容】进阶应用
  • javaScript-系统知识点【 ES6 新语法】
  • matlab 四维数据可视化(已解决)
  • 部署 Node.js 应用之 PM2
  • git:5步搞定向远程仓库提交
  • 基于SpringBoot的绿城郑州爱心公益网站设计与实现现(源码+SQL脚本+LW+部署讲解等)
  • 修改 DSRM 密码进行域维权
  • 【愚公系列】《Python网络爬虫从入门到精通》036-DataFrame日期数据处理
  • Leetcode 面试150题(二)
  • npx degit 问题:could not fetch remote...
  • AI赋能视频创作:零基础也能玩转短视频制作
  • 基于redis的位图实现签到功能
  • 【Python修仙编程】(二) Python3灵源初探(1)
  • 大白话React Hooks(如 useState、useEffect)的使用方法与原理
  • DeepSeek-V3关键技术之一:DeepSeekMoE