Django相关知识点

一、Django简介

  1. 简介图

在这里插入图片描述
http服务器:用来接受用户请求,并将请求转发给web应用框架进行处理。
Web应用框架处理完以后再发送给http服务器,http服务器再返回给用户。

  1. 工具准备
    在这里插入图片描述
    为什么要用虚拟环境?
    一个项目对应一个虚拟环境,多个项目可以创建多个虚拟环境。

二、环境搭建

一、创建虚拟环境及安装django

查看当前有哪些虚拟环境: workon
创建虚拟环境: mkvirtualenv -p /usr/bin/python3 envname
进入虚拟环境: workon envname
退出虚拟环境: deactivate
删除虚拟环境: rmvirtualenv envname
安装django : pip install django
查看当前python环境下的第三方库: pip list
新建项目的命令: django-admin startproject projectname
在虚拟机下执行:python manage.py runserver 0.0.0.0:8000

二、主文件介绍

manage.py django中的一个命令行工具,管理django项目。
_ init _.py 空文件,告诉python这个目录是python包。
setting.py 配置文件,包含数据库信息,调试标志,数据库连接、静态环境拼接等。
urls.py Django项目的URL声明,都是通过这个路由去访问。URL配置(URLconf)就像是Django所支撑网站的目录。它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表。以这样的方式告诉Django,对于那个URL调用那段代码。url的加载就是从配置文件中开始
wsgi.py 部署服务器用到的。

三、pycharm内环境配置

如果报错:That port is alredy in use,解决办法如下:
在Linux虚拟机下输入:ps -aux|grep python
可以看到当前有哪些服务正在启动。找到runserver对应的编号,输入:kill -9 bianhao即可正常运行。

四、创建视图函数

在主文件下New一个PythonFile命名为views
视图函数括号内一定要加上request(向服务发送请求)。在urls.py中进行配置后就能通过访问路由调用视图函数。
只有当输入的url跟后台配置的url一致才会调用url对应的视图函数。

五、项目与应用APP的关系

创建APP有两种方法

  1. 在虚拟机内输入命令:python manage.py startapp app_name
  2. 在pycharm中的Tools中打开Run manage.py输入:startapp app_name
    创建后都要在pycharm中下载

最后要在settings里面的INSTALLED_APPS里进行注册

三、url路由分配

一、URL格式

schema://host[:port#]/path/…/[?query-string][#anchor]
schema:指定使用的协议(例如:http, https, ftp)
host:Http服务器的IP地址或者域名
port:端口号,http默认是80端口
path:访问资源的路径
query-string:发送给http服务器的数据
anchor:锚点

二、path和re_path

1、path的基本规则:path('test/<xx>/',views.test)

使用尖括号(<>)从url中捕获值。包含一个转化器类型(converter type)没有转化器,将匹配任何字符串,当然也包括了 / 字符。当前面的url匹配成功后,就会调用后面的视图函数。
<>内可以传递参数,根据视图函数内(用字符串拼接)的参数传递
可以传递一个值:

def index(request,name,count):
    return HttpResponse('%s这是第%s节课'%(name,count))
#urls.py代码
path('index/<name>&<count>',views.index)

2、默认支持的转换器

str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
int,匹配正整数,包含0。
slug,匹配字母、数字以及横杠、下划线组成的字符串。
uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
path,匹配任何非空字符串,包含了路径分隔符
在参数前加,表明只能使用这样的数据格式:

def index(request,name,count):
    return HttpResponse('%s这是第%s节课'%(name,count))
#urls.py代码
path('index/<name>&<int:count>',views.index)  #count就只能输入int类型

3、re_path正则匹配

re_path(r'^hello/$',views.test5),
re_path(r'^hello/(?P<yy>[0-9]+)/',views.test6),

一般使用path

三、几个关键字的作用

1、include的作用

一个project有一个总的urls.py,各个app也可以自己建立自己的urls.py,用include()函数在project的urls.py文件进行注册

  1. 在主路由下导入分路由
from django.urls import path,include
  1. 在主路由下进行拼接
path('book/',include('book.urls'))

配置文件以及部署,都是在主项目下进行

2、kwargs(不定长参数)的作用

传递一个Python 字典作为额外的参数传递给视图函数。(传递后视图函数必须要接收)
Kwargs为字典类型,可以传递额外的参数到views中使用include的时候,需要统一给主路由下面的url一些参数的时候显得尤其有用(直接在分配路由下传即可,就不需要在每个视图函数下写重复的代码)

#views.py
def index(request,**kwargs):
    if kwargs.get('switch') == 'true':
        print(datetime.datetime.now())
    return HttpResponse('这个book的首页!!')
#urls.py下

path('book/',include('book.urls'),{
   'switch':'true'}),

3、name的作用

name参数可以给这个url取一个合适的名字。通过给url取名字,以后在view或者模板中使用这个URL,就只需要通过这个名字就可以了。这样做的原因是防止url的规则更改,会导致其他地方用了这个url的地方都需要更改,但是如果取名字了,就不要做任何改动了。

给一个匹配的url地址取名字。一般用于模板,也可以使用reverse进行页面重定向
页面重定向:
在这里插入图片描述
页面重定向有两种方法:

  1. 换路径
# book/url.py    APP books里面的URL文件
from django.conf.urls import path
from . import views

urlpatterns =[
    path('article/', views.article),  
]

# book/views.py   APP book里面的view文件
from django.shortcuts import render,reverse,redirect
from django.http import HttpResponse

def article(request,**kwargs):
    if kwargs.get('switch') == 'true':
                return redirect('/article/new')
    return HttpResponse('这是老文章')
  1. 用name
# book/url.py    APP books里面的URL文件
from django.conf.urls import path
from . import views

urlpatterns =[
    path('article/', views.article,name='books_article'),  
]

# book/views.py   APP book里面的view文件
from django.shortcuts import render,reverse,redirect
from django.http import HttpResponse

def article(request,**kwargs):
    if kwargs.get('switch') == 'true':
                return redirect(reverse('book_article_new'))
    return HttpResponse('这是老文章')

四、Django模板

一、模板路径配置

Django怎样去调用HTML前端页面呢?
调用模板
模板放在哪?有以下两种方式:

  1. 在主目录下创建一个templates目录用来存放所有app的html的模板文件。(一定要在主项目中setting.py中app里进行注册)
  2. templates目录里面在新建各个以app名字命名的目录来存放各个app中模板文件。(需要配置模板路径)

第一种: DIRS 定义一个目录列表,模板引擎按列表顺序搜索这些目录以查找模板源文件。将templates放在主项目目录下.
第二种: APP_DIRS告诉模板引擎是否应该进入每个已安装的应用中查找模板,值为True则模板会去安装了的app下面的templates文件夹查找模板。。所以我们也可以在每个app的里面创建模板目录templates存放模板,这种方式需要将这个app添加到setting.py文件的INSTALLED_APPS列表中.
一般使用1,在主目录下创建templates
判断文件是模板还是一个html文件只需要注释一下。HTML:<-- -->,模板文件:{# #}

1、模板路径

setting.py中模板路径配置:

TEMPLATES = [
    {
   
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
   
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

2、渲染方式

  1. 直接将html字符串硬编码HttpResponse中
def index_1(request):
    return HttpResponse('<h1>Hello Django World!</h1>')
  1. django.template.loader 定义了函数以加载模板。

get_template(template_name,using = None)

该函数使用给定的名称加载模板并返回一个Template 对象.get_template()尝试获取每个模板直到有一个成功满足。

from django.template.loader import get_template
def index_2(request,bn):
    t = get_template('index.html')  #获取模板
    html = t.render({
   'books_name':bn})  #渲染页面
    return HttpResponse(html)  #返回
  1. 使用render进行渲染。(最快)
from django.shortcuts import render

def index_3(request,bn):
    return render(request,'index.html',{
   'booksname':bn})

二、模板变量

1、模板变量使用规则:

向前端传递数据都是键值对的形式,通过键获取值。键是唯一的,值不唯一。
1.语法: { { 变量名 }}
2.命名由字母和数字以及下划线组成,不能有空格和标点符号
3.可以使用字典、模型、方法、函数、列表
4.不要和python或django关键字重名
5.变量和查找
注:
1.如果data是一个字典,那么访问data.items将会访问data这个字典的key名为items的值,而不会访问字典的items方法。
2.点在模板渲染时有特殊的含义。 变量名中点表示查找。具体一点,当模板系统遇到变量名中的一个点时,它会按下面的顺序进行查找:字典查找,属性查找,列表索引查找。

# books/views.py
def hello():
    return 'django'

class Fruits:
    def __init__(self, name, color):
        self.name = name
        self.color = color
    def say(self):
        return 'HAHAHAHA'  
    
ap = Fruits('apple','red')   #实例化
ls = ['x','y','z']
dc =  {
   'a':1,'b':2}
from django.shortcuts import render
def index_5(request,bn):
    return render(request,'books/index.html',     #渲染
                  context={
   'books_name':'python',#字符串
                           'hello':hello,        # 函数
                           'fruits_say':ap.say,  # 方法
                           'fruits':ap,          # 类对象
                           'list':ls,            # 列表
                           'dict':dc,            # 字典
                           }) 

模板下的代码:

{
   # /templates/books/index.html #}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
    这个变量是字符串对象:{
   {
    books_name}}<br>
    这个变量是函数对象:{
   {
    hello}}<br>
    这个变量是类方法对象:{
   {
    fruits_say}}<br>
    这个变量是类对象:{
   {
    fruits}}<br>
    这个变量是类对象,访问类对象的属性:{
   {
    fruits.name}}<br>
    这个变量是类对象,访问类对象的方法:{
   {
    fruits.say}}<br>
    这个变量是列表对象{
   {
    list }}<br>
    这个变量是列表对象,访问列表的元素{
   {
    list.1 }}<br>
    这个变量是字典对象{
   {
    dict }}<br>
    这个变量是字典对象,访问字典的键{
   {
    dict.a }}<br>
</body>
</html>

三、模板过滤器

作用: 对变量进行过滤。在真正渲染出来之前,过滤器会根据功能处理好变量,然后得出结果后再替换掉原来的变量展示出来。
语法:{ {fruits|lower}}
管道符号进行链式调用,比如实现一个功能,先把所有字符变成小写,把第一个字符转换成大写。
语法:{ {fruits|lower|capfirst}}

使用参数:过滤器可以使用参数,在过滤器名称后面使用冒号”:”再加上参数,比如要把一个字符串中所有的空格去掉,则可以使用cut过滤器。语法如下: { {fruits|cut:" "}}
过滤器参数,可以使用变量,字符串相加,数字相加,列表相加,如果失败,将会返回一个空字符串。

注:使用参数的时候,冒号和参数之间不能有任何空格,一定要紧挨着。

1、常用过滤器

1、 add :字符串相加,数字相加,列表相加,如果失败,将会返回一个空字符串。
2、default:提供一个默认值,在这个值被django认为是False的时候使用。比如:空字符串、None。区别于default_if_none,这个只有在变量为None的时候才使用默认值。
3、first:返回列表中的第一个值。
4、last:返回列表中的最后一个值。
5、date:格式化日期和时间。
6、time:格式化时间。
7、join:跟python中的join一样的用法。
8、length:返回字符串或者是数组的长度。
9、length_is:字符串或者是数组的长度是否是指定的值。
10、lower:把所有字符串都编程小写。
11、truncatechars:根据后面给的参数,截断字符,如果超过了用…表示。
12、truncatewords:同truncatechars,这个是以一个单词为单位进行截断。
以上两个有xxx_html类型的,针对html,截断标签中的字符,而不会截断标签。
13、capfirst:首字母大写。
14、slice:切割列表。用法跟python中的切片操作是一样的,区间是前闭合后开放。
15、striptags:去掉所有的html标签。
16、safe:关闭变量的自动转义
17、floatformat:浮点数格式化。

2、date和time过滤器格式

Y:四位数的年。如:1999
y:两位数的年。如:99
m:两位数的月。如:01,09
n:一位数的月。如:1,9,12
d:两位数的日。如:01,09,31
j:一位数的日。如:1,9,31
g:12小时制的一位数的小时。如:1,9,12
G:24小时制的一位数小时。如:0,8,23
h:12小时制的两位数的小时。如:01,09,12
H:24小时制的两位数的小时。如:01,13,24
i:分钟。从00-59
s:秒。从00-59
默认为美国时间,如果要改地区时差就在主目录下的settings里面改

3、自动转义

自动转义是将变量的一些特殊字符,比如左箭头(<)、右箭头(>)转义成html代码,这样做的目的是为了处理一些不安全的变量。

<:转义成&lt;
>:转义成&gt;
‘:转义成&#39;
“:转义成&quot;
&:转义成&amp;

取消自动转移用safe:{ { html|safe }}

过滤器例子:
新建一个名为movie的APP。

# movie/views.py
from django.shortcuts import render
from datetime import datetime

ls = ['x','y','z']
def hello(request):
    test = 'THIS IS A LIST!'
    return render(request,'movie/home.html',
                  context={
   'test':test,
                           'xx':'',
                           'num1':1,
                           'num2':2,
                           'list':ls,
                           'now':datetime.now,
                           'html':'<h1>hello django!!!</h1>',
                           'float':3.1415926,
                           })

模板下的代码:

{
   # /templates/movie/index22.html #}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>home</tit
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django是一个基于Python语言的Web框架,其提供了一系列拓展和技术来增强其功能和性能。以下是一些常见的Django拓展知识点和技术: 1. Django REST framework:提供了一套用于构建RESTful API的工具集,包括序列化、验证、路由、视图等功能。 2. Django ORM:提供了一套用于操作数据库的对象关系映射工具,支持多种数据库后端。 3. Django Admin:提供了一个自动生成的管理后台,用于管理应用程序的模型数据。 4. Django Cache:提供了一套缓存框架,用于缓存数据库查询、视图响应等数据,提高应用程序的性能。 5. Django Signals:提供了一套信号机制,用于在模型保存、删除等事件发生时触发特定的操作。 6. Django Middleware:提供了一套中间件机制,用于在请求和响应处理过程中进行一些通用的操作,例如权限验证、日志记录等。 7. Django Celery:提供了一套分布式任务队列工具,用于异步执行一些耗时的操作,例如发送邮件、生成报表等。 8. Django Channels:提供了一套异步通信工具,用于实现实时应用程序,例如聊天室、在线游戏等。 9. Django Formtools:提供了一套表单处理工具,用于处理复杂的表单场景,例如分步骤提交、多表单提交等。 10. Django Debug Toolbar:提供了一套调试工具条,用于在开发过程中监控请求响应时间、数据库查询等性能指标,帮助开发者进行调试和性能优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值