【Django5】练习
Django学习
- 功能快捷键
- FLowchart流程图
- Django5
- Django基础知识
- 下载
- 启动Django
- urls
- DTL
- 表达式
- 过滤器
- include
- block
- extends
- 全新的界面设计 ,将会带来全新的写作体验;
- 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
- 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
- 全新的 KaTeX数学公式 语法;
- 增加了支持甘特图的mermaid语法1 功能;
- 增加了 多屏幕编辑 Markdown文章功能;
- 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
- 增加了 检查列表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的流程图:
- 关于 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运行,效果一样
- manage.py:项目交互 python manage.py [子命令/help]
- settings.py:配置,比如数据库、跨域
- urls.py:项目所有url
- wsgi.py:部署项目
- project和app,一个app一个模块,所有模块放到django项目里面
- 通过命令
python manage.py startapp appName
创建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,然后发送到客户端
渲染模板:
html=render_to_string(detail.html)
然后return HttpResponse(html)
- 直接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
传参
- json,类和数组都用
#任一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)
表达式
名称 | 功能 |
---|---|
if | if a in b ;elif c==d;else e;endif |
for | if 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 |
empty | for的东西为空,执行{%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,“”) |
date | datetime.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_html | html字符串不切割标签 |
#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%}
{%%}
mermaid语法说明 ↩︎
检查列表 ↩︎