Django(二)路由,模板ORM

(一)正则
正则:是一种字符串的处理方式,常用来检索或者替换符合规则的内容。

  • 内容匹配
    • python中的re模块 re.findall
    • 通过匹配内容的类型,长度等进行检索
  • 结构匹配
    • xpath通过某个内容所在的结构检索内容

实验代码

# 正则
import re
string = "hello world  1 1 \n"
# 原样匹配
# res = re.findall("hello",string)
# print(res)
# 正则
# 类型匹配
# \d 匹配数字
# res = re.findall("\d",string)
# print(res)
# \D 匹配非数字
# res = re.findall("\D",string)
# print(res)
# \w 匹配 字母 数字 下划线
# res = re.findall("\w",string)
# print(res)
# \W 非字母 数字 下划线
# res = re.findall("\W",string)
# print(res)
# \s 匹配 不可见字符
# res = re.findall("\s",string)
# print(res)
# \S 可见字符
# res = re.findall("\S",string)
# print(res)
# [] 匹配包含的字符
res = re.findall("[a-z1-9]",string)
print(res)
string = "151 0101 0101"
# {} 长度
res = re.findall("\d",string)
print(res)
(二)Django中的正则路由
导入 re_path
1、路由正则
2、组匹配
可以将匹配到的内容作为参数(位置参数)进行传递
路由
res = re.findall("\d{5}",string)
print(res)
print("长度匹配")
string = "1212 h h2"
# * 匹配 0个或者多个
res = re.findall("\d*",string)
print(res)
# + 匹配 1个或者多个
res = re.findall("\d+",string)
print(res)
# ?匹配 0或者1个
res = re.findall("\d?",string)
print(res)
# () 组匹配
# string = "151"
# res = re.findall("\d\d",string)
# print(res)
#
# # string = "15 19 01 0w"
# res = re.findall("(\d)\d",string)
# print(res)
# P 组名 组匹配起一个名字
string = "152 0101 0101 0"
res = re.findall("(\d)\d",string)
print(res)
res = re.findall("(?P<xxx>\d)\d",string)
print(res)
# ^ 开头
res = re.findall("^1",string)
print(res)
# $ 结束
res = re.findall("0$",string)
print(res)

(二)Django中的正则路由
导入 re_path
1 路由正则

re_path("hello/\w*/",hello)

2组匹配
可以将匹配到的内作为参数(位置参数)进行传递
路由

re_path("atcity/(\w*)/",atcity)

视图

def atcity(request,city):
 return HttpResponse("在%s城市" % city)

3在组名的组匹配
可以将匹配到的内容作为参数(关键字参数)进行传递,但是路由中的组名必须和视图中的参数名一样

re_path("atcity_p/(?P<year>\d{4})/(?P<city>\w+)/",atcity_p)
def atcity_p(request,year,city):
 return HttpResponse("%s年在%s城市" % (year,city))

二Django模板
(一)调用模板页面
1创建模板目录
在这里插入图片描述
2在setting中增加配置
在这里插入图片描述
3视图返回模板

from django.shortcuts import render_to_response
def index(request):
  return render_to_response("index.html")

(二)模板传值方式

from django.shortcuts import render_to_response
def index(request):
 # 第一种
 # return render_to_response("index.html",{"name":"zhangsan"})
 # 第二种
 # params = {
 #   "name":"zhangsan",
 #   "age":19
 # }
 # return render_to_response("index.html",params)
 # 第三种 使用locals进行传参
 name = "zhangsan"
 age = 12
 hobby = ["唱歌","跳舞","学习"]
 return render_to_response("index.html",locals())

(三)模板语法
1变量的使用
语法{ {变量}},依然可以使用多种python的多种数据类型,和部分的方法

<p>
 {
   
   { name }}
 {
   
   { age }}
</p>
<p>
 爱好:{
   
   { hobby }}
 第二个爱好: {
   
   { hobby.1 }}
</p>
<p>
 分数: {
   
   { score }}
 python 分数: {
   
   { score.python}}
</p>

2标签语法
if 判断

	{% if 条件%}
	{% elif 条件%}
	{% else %}
	{% endif %}

for

{% for 可迭代对象 %}
{% endfor %}


<p>
  <h2>for循环列表</h2>
 {% for one in hobby %}
   {
   
   { one }}
 {% endfor %}
</p>
<p>
  <h2>for循环字典</h2>
 {% for key,value in score.items %}
   {
   
   { key }}:{
   
   { value }}
 {% endfor %}
</p>

forloop
类似于jinja2中的loop,记录了循环的状态

counter 计数 从1开始
counter0 计数,从0开始
first   是否是第一个,返回值为布尔值
last   是否为最后一个,返回值为布尔值
revcounter  倒序计数,最小为1
revcounter 倒序计数,最小为0
  <h2>隔行变色</h2>
 {% for one in hobby %}
   {% if forloop.first %}
      <p style="background-color: red">{
   
   { forloop.counter }}:{
   
   { one }}</p>
   {% elif forloop.last %}
      <p style="background-color: blue">{
   
   { forloop.counter }}:{
   
   { one }}
</p>
   {% else %}
      <p style="background-color: yellow">{
   
   { forloop.counter }}:{
   
   { one }}
</p>
   {% endif %}
 {% endfor %}

if equal判断

{% ifequal age 18 %}
   18岁
 {% endifequal %}
 {% ifequal age 19 %}
   19岁
 {% endifequal %}

3模板过滤器
对视图传递的数据进行二次处理
语法:{ {变量|方法}}
{ { 变量 | 方法 :参数 }}
自带过滤器
upper lower add safe

<p>
  <h2>过滤器</h2>
 {
   
   { name | upper | lower}}
 {
   
   { age | add:10 }}
 {
   
   { html | safe}}
</p

4继承和加载
页面中有大量的冗余代码时,可以使用继承和加载将公共的部分提取

1继承

制作base页面
提取公共的部分
独有的位置补充块 block
子页面继承base页面
使用extends继承
打卡相应的块,填入独有的内容
在这里插入图片描述
2加载include
提供公共的部分,编写一个html文件,在其他页面中,使用include将内容加载到指定的位置
在这里插入图片描述
5、静态文件处理

  • 在manage.py 同级目录创建static目录
  • settings中增加配置
    在这里插入图片描述
    模板中使用静态文件
    第一种
<img src="/static/gtl.jpg" alt="">

第二种
在html文件的头部导入static
{%load static%}
使用静态文件

<img src="{% static '图片路径/图片名' %}" alt="">

三Django 中的ORM
(一)Django App
App(application)就是应用的意思,当项目足够大的时候,我们将功能单独分成多个App进行开
发。Django 鼓励程序员进行松耦合开发,就是将项目拆分成独立的功能块进行开发,减少代码相互的
耦合(依赖)程度,保证代码的可维护性和项目结构的清晰程度。
1创建App
进入manage.py同级目录,执行命令

python manage.py startapp appname

在这里插入图片描述

|-projectname  工程目录
|-app01
|-migrations    数据库迁移目录
|- __init__.py   子应用初始化文件
|- admin.py    站点管理
|- apps.py     子应用文件,记录了子应用的一些信息,例如子应用的名字等
|- models.py    模型文件
|- test.py     测试文件,大多情况下编写单元测试内容
|- views.py    视图文件

2注册app
在这里插入图片描述
3使用
子应用中的views中编写视图
在这里插入图片描述
路由
在这里插入图片描述
4pycharm创建子应用
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/h1751541643/article/details/108971782