Djanjo


一、静态文件

什么是静态文件

  • 静态文件:写好的文件不会动态的改变的的文件的资源   比如css 文件,js文件  图片文件,第三方框架等
  • 墨守成规的将这些文件放在自创  static文件夹中   在静态文件夹中创建css,js, img,other文件夹.....

配置静态文件  那第三方框架bootstrap来举例,如果用到静态文件,需要setting.py配置  配置好bootstrap的绝对路劲  只从根目录写起就好了

再需要写静态文件,再static中写就好了

'''settings.py'''
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static')
]

eg:

'''urls.py'''
from django.contrib import admin
from django.urls import path
from app01 import views


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

]

'''views.py'''
from django.shortcuts import render

# Create your views here.
def  login(request):
    return render(request,'login.html')

"en">

    "UTF-8">
    Title
    "stylesheet" href="/static/CSS/bootstrap.min.css">
    
    


    
class="container">
class="row">

class="text-center">用户登录

class="col-md-8 col-lg-offset-2">
class="form-group"> "email" class="form-control" id="exampleInputEmail1" placeholder="Email">
class="form-group"> "password" class="form-control" id="exampleInputPassword1" placeholder="Password">
  • 配置静态文件完成之后  那么在static文件下的文件都可以通过路径访问到    eg:127.0.0.1:8000/static/a.txt
  • 如果DJango主页面不能访问了,在urls.py文件中写一个默认的对应关系的补充  

 静态文件配置及访问的顺序

静态文件

STATIC_URL = '/static/'  # 接口前缀,不是文件名,类似"令牌"

'''
如果你想要访问静态文件资源必须以static开头,如果写了接口前缀之后,下面的静态配置文件下的文件都能够访问
'''
# 静态文件配置,可以写多个,访问的顺序是从上往下依次查找
STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'static'),
    os.path.join(BASE_DIR,'static1'),
    os.path.join(BASE_DIR,'static2'),
]

动态解析

  •   涉及到接口前缀的修改繁琐的问题   那么现在使用的动态解析的语法来实现,修改了接口前缀也能够动态解析,从而不需要挨个文件的修改!







{% load static%}
    "stylesheet" href="{% static '\CSS\bootstrap.min.css' %}">
    

request对象方法

提交表单出现403错误,如何解决?

 settings.py文件注释掉'django.middleware.csrf.CsrfViewMiddleware',就可以了

  • request方法

  • request.method:获取当前请求方法
  • request.body:以二进制的形式返回用户提交的数据
  • request.POST:以字典的形式返回用户提交的数据
from django.shortcuts import render,HttpResponse,redirect

# Create your views here.
def  login(request):
    print(request.method, type(request.method))  # GET 
    if request.method=='POST':
        return HttpResponse('POST请求返回结果!')
    return render(request,'login.html')   # GET请求返回页面

注意:request.POST返回的字典用get方法获取列表形式的value,返回的是字符串,get方法只会取列表的最后一个元素

# 在获取用户多选或者提交的信息是多条,返回在一个列表内如何获取用户数据呢?
使用request.POST.getlist方法,返回一个列表,就不再使用get方法了

def  login(request):
    print(request.method, type(request.method))  # GET 
    print( request.POST)
    print( request.POST.get('Email'))       #   123@qq.com
    print( request.POST.getlist('Email'))   # ['123@qq.com']
    if request.method=='POST':
        return HttpResponse('POST请求返回结果!')
    return render(request,'login.html')   # GET请求返回页面

GET请求方式的方法是一样的

如何获取URL?后面的参数?

request.GET方法:和request.POST方法是一样的,返回字典

request.GET.get(k):获取字典的value,返回字符串

request.GET.getlist(k):获取用户数据,获取到整个列表

文件对象如何获取??

针对表单提交的文件对象,如何获取?这里不能使用request.POST或者request.GET方法,使用request.FILES方法,返回结果看成字典即可

  • 获取表单提交文件对象的方法:request.FILES

方法有了,返回的是空字典,在表单中添加enctype参数,再提交就可以获取到文件对象

"" method="post" enctype="multipart/form-data">

Django连接MySQL

Django默认使用的数据库是sqlite3,这里介绍如何使用Django连接MySQL数据库

1、修改配置文件

# 默认的情况settings.py文件
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
# 修改配置文件
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '数据库',
        'HOST':'ip地址',
        'PORT':3306,
        'USER':'用户名',
        'PASSWORD':'密码',
        'CHARSET':'utf8'
    }
}
# 数据库使用是提前创好的!!!

2、在项目文件夹或应用文件夹中的__init__.py文件书写固定的代码

'''__init__.py'''
import pymysql
pymysql.install_as_MySQLdb()

如果报错: query = query.decode(errors='replace') AttributeError: 'str' object has no attribute 'decode'

解决办法:query = query.decode(errors='replace')提换成query = errors = 'replace'