Django

Django

命令行命令

#启动项目
python manage.py runserver
#创建一个APP,还要在setting.py里的INSTALLED_APPS添加myapp
python manage.py startapp myapp

如果要让远程客户端连接需要修改配置⽂件

#修改setting.py中的这⼀⾏
ALLOWED_HOSTS = ['*']

视图

在django中view代表视图函数,接收⽤户的请求,进⾏处理然后返回html源代码 给客户端。在框架中,我们可以在应⽤(app)的views.py中写⾃⼰的视图函数, 进⾏相应的处理。 视图函数只是⼀个普通的python函数,它的第⼀个参数必须是⼀个请求 (request)对象,这是框架传⼊的,我们可以通过请求对象获取提交参数等内 容。它的返回值必须是⼀个web响应对象,可以⽂本、html源代码、᯿定向、404 等内容。下⾯我们写⼀个简单视图函数,返回“Hello Django"

from django.http import HttpResponse
def index(request):
 return HttpResponse("Hello Django")

路由

在自己创建的app中添加url.py,这是子路由,和程序中原本的url.py是一样的,可以直接复制

添加了子路由,就必须在主路由中include进去

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    #根路由
    path('admin/', admin.site.urls),
    #把子路由include进来
    #user/ 路由前缀
    path('user/',include('myapp.urls')),
]

HttpRequest

HttpResquest 是从web服务器传递过来的请求对象,经过Django框架封装产⽣的, 封装了原始的Http请求 服务器接收到http请求后,django框架会⾃动根据服务器传递的环境变量创建 HttpRequest对象 视图的第⼀个参数必须是HttpRequest类型的对象 在django.http模块中定义了HttpRequest对象的API 使⽤HttpRequest对象的不同属性值,可以获取请求中多种信息.。

#requset常用属性
    # #get传参的获取,在浏览器尾部添加值 http://127.0.0.1:8000/user/tel/12345678/?username=tom&age=20&age=23
    # print((request.GET))#GET qusersetDICT字典
    # #获取单一值
    # print(request.GET.get('username'))
    # #获取全部值
    # print(request.GET.getlist('age'))#返回值是一个列表

HttpResponse

# #POST
    # #单值,利用渲染
    # print(request.POST.get('username'))
    # #多值
    # print(request.POST.getlist('hobby'))

其他方法

# #获取请求方法
    # print(request.method)
    #
    # #获取请求路径
    # print(request.path)
    #
    # #其他属性
    # print(request.META)
    # #客户端地址
    # print(request.META.get('REMOTE_ADDR'))
    # #来源页面
    # print(request.META.get('HTTP_REFERER'))

    # #常用方法
    # print(request.get_full_path())#/user/tel/12345678/?name=2222
    # print(request.get_host())#127.0.0.1:8000
    # print(request.build_absolute_uri())#http://127.0.0.1:8000/user/tel/12345678/?name=2222 完整的请求路径
    #获取请求参数的字典
    print(request.GET.dict())#{'name': '2222'}

调⽤模板返回

首先要在templates当中创建一个html文件


重定向

    #HttpResponseRedirect 重定向到指定路由,参数就是路由
    #return HttpResponseRedirect('/user/')
    #redirect 是 HttpResponseRedirect快捷方式
    return redirect('/user/')

反向定位

#反向定位:由应用命名空间:name来确定路由,在url里面写
app_name='APP' #应用的名空间
#return redirect(reverse('APP:index')) #不带参数
#如果参数有名字,必须用kwargs传参方式
#return redirect(reverse('APP:show',kwargs={'name':'tom','age':12}))
return  redirect(reverse('APP:call',args=('0123-12345678',)))

动态路由

前⾯写的url都是静态的,无法给视图函数传递数据,要想给视图函数传参数,url 必须是动态,带有参数,但Django主张漂亮简介的url,所以不会使⽤查询字符串 (/hello?name=tom),⽽是采⽤通配符:

#路由列表 名称就叫urlpatterns
urlpatterns= [
    #不能斜线开头
    #首页
    #path的第三个参数name是路由的名称,和视图函数参数无关
    path('home/',views.home,name='home'),

    #视图函数中的参数必须和路由中参数名称相同
    #int 带参数
    path('show/<int:age>/',views.show,name='show'),
    #slug
    path('list/<slug:name>',views.list_user,name='list'),
    #path,如果有多个参数,path类型必须在最后
    path('access/<path:path>/',views.access,name='access'),
    #String 默认参数类型
    path('change/<name>/',views.change_name,name='change'),

    #re_path 和 path最大的区别就是匹配时正则模式串,能少用就少用
    re_path(r'^tel/(\d{8})/$',views.get_phone,name='phone'),
    ]

模板

模板位置

第一种在应⽤中建⽴templates⽬录,好处不需要注册,不好的地⽅,有多个应⽤的 时候不能复⽤⻚⾯

第⼆种是放在⼯程的⽬录下,好处是如果有多个应⽤,可以调⽤相同的⻚⾯, 需要注册 。

模板语法

变量

视图中定义方法

def handle_var(request):
    num=10
    name='中国'
    students=[10,20,30,40,[50,60]]
    student={'name':'缪程','age':30}
    return render(request,'变量.html',locals())
<body>
{# 变量 #}
{# 复杂类型的访问可以连续使用.,不能使用下表 #}
{{ num }}
<p>
    {# 不能写表达式 #}
    {{ name }}
</p>
<hr>
<p>
    {# 不能使用下标 #}
    {{ students.0 }}
    {{ students.4.0 }}
</p>
<p>
    {{ student.name }}
</p>
</body>

过滤器

过滤器是在变量显示之前修改它的值的⼀个⽅法,过滤器使⽤管道符.

{{变量|方法}}
def handle_filter(request):
    num=10
    name='缪程'
    #age= None
    t1 = datetime.now()
    return render(request,'过滤器.html',locals())
<body>
{# 过滤器 #}
{{ num|add:'10' }}
<p>
    {{ age|default_if_none:'您好' }}
    {# 如果变量不存在 #}
    {{ age|default:'ok' }}
</p>
<p>
    {{ t1|date:'Y-m-d H' }}
</p>
<p>
    {# 自定义过滤器 #}
    {{ 5|sub1 }}
</p>

自定义过滤器,在APP里面创建一个包,必须是templatetags,在包里面创建py文件。

from django import template
#建立模板对象
register = template.Library()
#装饰器,指定装饰器的名字
@register.filter(name='sub1')
def sub(value): #参数最多俩个
    return value - 1

内置标签

def handle_tag(request):
    l1=[20,30,40]
    num=18
    return render(request,'tag.html',locals())
<body>
{# 不可以使用小括号 #}
{# 构造复杂条件,需if 嵌套 #}
{% if num < 10 %}
    <p>武汉加油</p>
{% elif num < 20 %}
    <p>中国加油</p>
{% elif num < 20 %}
    <p>世界加油</p>
{% endif %}
<p>
    {% for value in l1 %}
    <li>{{ value }}</li>
{% endfor %}
</p>
<p>
    {% for value in l1 reversed %}
        <li>{{ forloop.counter0 }}--{{ value }}</li>
    {% endfor %}
</p>
</body>
#用于判断俩个值是否相等
{% ifequal var var %}
{% endifequal %}
{% ifnotequal var var %}
{% endifnotequal %}

模板导入标签

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{% include 'app01/div.html' %}
</body>
</html>
#导入的文件只能写这么多
<div>
    被包含的文件
</div>

在模板中url标签可⽤于反向解析

<body>
<ul>
    <li><a href="{% url 'APP01:index' %}">首页</a></li>
    <li><a href="{% url 'APP01:show' name='admin' %}">show</a></li>#带参
</ul>
</body>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值