django基础补充

103 阅读4分钟

安装

版本的安装:

 pip install django==1.11.18

在python的环境下使用 import python ,不报错就说明是可以的。

退出命令:quit()

查看版本是 进入python命令并且引入django

import django

django.version

创建一个项目

这个命令可以全局使用,应该是。

django-admin.py startproject my_project

进入项目,然后启动服务:

python manage.py runserver

创建模块:

 python manage.py startapp accounts

汉化

在设置里边 plugin 搜索 chinese

创建目录:

utils new的时候是创建一个package的包

static 里边放 js css image upload lib

template 放html文件

视图文件对应关系

在mall文件下的urls里边编写视图和文件的对应关系

具体配置代码:

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

urlpatterns = [
    path('admin/', admin.site.urls),
    
]

路径对应的是某个文件里边的方法。这里对应的是views.index的方法,所以需要建立一个views的文件里边是index方法。

具体过程:

主要是分成两步,

两个文件都是在项目文件名称下

一个是在urls.py 进行设置:

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

from mall import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path("",views.index,name="index")
]

然后新建一个views.py 就是通过视图对应的寻找html模板文件,模板文件必须是放在templates里边的。

views.py 代码如下:

from django.shortcuts import render

def index(request):
    return render(request,"index.html")

犯错:

render 函数必须加 request 这个参数,否则报错

from django.shortcuts import render

def index(request):
    return render(request,"index.html")

静态文件的读取

主要是对静态文件开权限,就是可以被访问到

在项目名称文件下的settings.py中查看静态文件的配置:

需要配置一下目录,配置的网址在注释里,从网址粘贴过来就可以:

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.0/howto/static-files/


STATIC_URL = 'static/'
STATICFILES_DIRS = [
    BASE_DIR / "static",
]

视图快捷方法

视图向页面输出的内容:

如下代码:

from django.http import HttpResponse


#测试
def test(request):
    return HttpResponse("haha")
# 会在页面上输出haha,其实是可以输出一段html的并且可以调整样式。

输出html的结构如下:

#测试
def test(request):
    now=datetime.now()
    html="<h1 style='color:red;'>now:::{0}</h1>".format(now)
    return HttpResponse(html)

视图获取参数

配置文件爱
#测试页面,后边必须加上/表示结束 ,
    path("test/<int:year>/",views.test)
    
    
    
   方法:
#测试,谨记  这种获取方式是 /参数   是这种形式
def test(request,year=2021):
    print("year::>>{0}".format(year))
    now=datetime.now()
    html="<h1 style='color:red;'>now:::{0}</h1>".format(now)
    return HttpResponse(html)

如果是param参数则是如下获取方法:

通过request进行一个获取

#测试
def test(request,year=2021):
    print("year::>>{0}".format(year))
    m=request.GET.get("month",None);#None是默认值
    now=datetime.now()
    html="<h1 style='color:red;'>now:::{0}</h1>月份{1}".format(now,m)
    return HttpResponse(html)

如果是post则是:

m=request.POST.get("month",None)

视图获取传递过来的参数

跳转到某个页面,并且值传递过去:

    return render(request,'test.html',{
        "now":now
    })

test.html结构如下:

    <body>

        now::{{now}}
    
    </body>
    s

所以html结构是完全可以进行获取的。

重定向

url的配置:

    path("index1/",views.index1,name="index1"),
    path("index2/",views.index2,name="index2")
    

重定向的方法如下:

def index1(request):
    return redirect("/index2/");#访问index的url时跳转到index2的rul上,一般建议用url的name,即使url以后变化也不影响


def index2(request):
    return render(request,"index2.html")

400与500的错误

默认python是调试模式,其实是可以设置模式的。

在setting.py 中修改配置:

# SECURITY WARNING: don't run with debug turned on in production!生产环境
DEBUG = False
#设置哪些地址是可以访问的
ALLOWED_HOSTS = ["*"]

我们以handler404为例说明一下,主要是分成两步:

第一步是覆盖变量,然后给这个变量赋值一个方法,这个方法是视图方法,如下代码:

handler404=views.page_404

视图方法:

def page_404(request,exception):
    return HttpResponse("内容丢失,请稍后再尝试...",status=404)

静态文件的处理

在setting.py中添加如下的内容:

设置里边设置这个:

STATIC_ROOT = "/var/www/example.com/static/"

然后运行如下操作就可以:

$ python manage.py collectstatic

request

  m=request.GET.get("month",None);#None是默认值

如果是query的方式,那么就直接在参数里边进行接收了:

这个里边的year就是 query的方式。

def test(request,year=2021):
    print("year::>>{0}".format(year))

输出形式

可以是text/html ,text/pain , application/json

接口的形式就是application/json进行输出的,举例说明,如果输出json的格式的操作:\

def json_test(request):
    user_info={
        "name":"laohu",
        "age":30
    }
    #把python的字典转换成json的格式
    user_info_json=json.dumps(user_info)
    return HttpResponse(user_info_json,content_type="application/json")

直接使用json的相关方法:

def json_test(request):
    user_info={
        "name":"laohu",
        "age":30,
        "sex":"男"
    }
    #把python的字典转换成json的格式
    # user_info_json=json.dumps(user_info)
    # return HttpResponse(user_info_json,content_type="application/json")
    return  JsonResponse(user_info);

response的输出

def write_test(request):
    resp=HttpResponse("nihao",status=200)
    #在原来输出的基础上再添加输出的内容
    resp.write(" --haha")
    return resp

文件的输出:

def file_test(request):
    #获取当前mall项目的根路径 + 加上图片的路径
    file_path=os.path.join(mall.settings.BASE_DIR,"static/medias/1.jpg")
    #获取当前文件的二进制
    file_rb=open(file_path,'rb')
    #输出二进制
    return FileResponse(file_rb)

输出来的是图片,图片是二进制的操作,但是这里不需要单独去设置二进制的问题。

而是直接显示图片。

视图

通过视图来展示模板。

配置视图:urls.py中进行配置
  path("show_class/",views.ShowClassView.as_view(),name="ShowClassView")

视图是写一个类,我们主要是重写这个类:\

#如果是视图的话,需要继承TemplateView
class ShowClassView(TemplateView):
    #这个是固定写法,是这个视图类所对应的模板文件
    template_name = "show_class.html"

模板

模板文件是写在templates里边