Django框架(二)基础

一、Django路由

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

  • 内容匹配:
    • 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、变量的使用
<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 %}

ifequal 判断

{% 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中增加配置
    在这里插入图片描述
  • 模板中使用静态文件

方法1

<img src="/static/gtl.jpg" alt="">

方法2

  • 在html文件的头部导入static
{% load static %}
  • 使用静态文件
<img src="{% static '图片路径/图片名' %}" alt="">

(四) 加载静态页面

  • 制作base页面

1.增加title块
2.style块
3.content 内容块
4.js 块

三、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中配置视图
    在这里插入图片描述
    配置路由
    在这里插入图片描述
    4、Pycharm创建子应用
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值