Django day002

Posted 12兵哥哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django day002相关的知识,希望对你有一定的参考价值。

安装

  • pip3 install django
  • Python35\Scripts目录添加至环境变量

命令行操作

  • 创建django工程: django-admin.exe startproject mysite(工程名)

  • cd mysite

  • 运行服务端,默认端口8000: python manage.py runserver

  • 指定端口,运行服务器: python manage.py runserver 127.0.0.1:8001

  • 创建app: python manage.py startapp cmdb(app名)

  • 创建数据库表结构:

    python manage.py makemigrations

    python manage.py migrate

  • 创建管理员用户及密码(Django自带的后台管理):

    python manage.py createsuperuser


目录

mysite

mysite 			对整个程序进行配置
	init.py		包
	settings.py	配置文件,例如连接数据库、支持静态文件、支持缓存、支持模板
	urls.py		URL对应关系
	wsgi.py		遵循WSIG规则,一套接口规则,即调用别人实现的socket,上线用uwsgi + nginx
manage.py		管理Django程序
app
	migrations	记录数据库的修改表结构操作
	admin.py	Django提供的后台管理
	apps.py		配置当前app
	models.py	ORM,写指定的类,通过命令可创建数据库表结构
	tests.py	单元测试
	views.py	业务代码
db.sqlite3		数据库

pycharm操作

  • 创建django工程: File -> New Project -> Django -> 输入工程路径和工程名 -> Create
  • 运行服务端,默认IP 127.0.0.1, 默认端口8000: 点击工程名边上的运行按钮
  • 修改服务端运行配置参数: 点击工程名上的向下按钮,选择Edit Configurations
  • 修改pycharm根目录: File -> Settings -> Project:xxx -> Project Structure -> 设置 -> Apply -> OK

工程配置

配置模板路径(templates)

工程中的settings.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‘,
        ],
    },
},
]

配置静态目录(static)

工程中的settings.py

STATIC_URL = ‘/static/‘
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, ‘static‘),
)

注册app(数据库配置)

工程中的settings.py
	INSTALLED_APPS中添加app命令,例如
		INSTALLED_APPS = [
		    ‘django.contrib.admin‘,
		    ‘django.contrib.auth‘,
		    ‘django.contrib.contenttypes‘,
		    ‘django.contrib.sessions‘,
		    ‘django.contrib.messages‘,
		    ‘django.contrib.staticfiles‘,
		    ‘app01‘,
		]

根据情况配置使用数据库(可选)

默认数据库(无需修改)
DATABASES = {
    ‘default‘: {
        ‘ENGINE‘: ‘django.db.backends.sqlite3‘,
        ‘NAME‘: os.path.join(BASE_DIR, ‘db.sqlite3‘),
    }
}

修改数据库方式,数据名(dbname)需要自己创建
DATABASES = {
    ‘default‘: {
    ‘ENGINE‘: ‘django.db.backends.mysql‘,
    ‘NAME‘:‘dbname‘,
    ‘USER‘: ‘root‘,
    ‘PASSWORD‘: ‘xxx‘,
    ‘HOST‘: ‘‘,
    ‘PORT‘: ‘‘,
    }
}

注:Django默认使用MySQLdb模块连接mysql数据库,但python 3.x中无该模块
	需要改为pymysql:在project同名文件夹下的__init__.py文件中添加代码如下:
		import pymysql
		pymysql.install_as_MySQLdb()

html文件中,关联静态文件

静态文件包括CSS, javascript, Images

关联css
在html头部,添加
<link rel="stylesheet" href="/static/commons.css"/>

关联js
在html的body的最后,添加
<script src="/static/commons.js"></script>

函数功能示例

HttpResponse("字符串")

from django.shortcuts import HttpResponse

def home(request):
    # return ["<h1>Hello, date!</h1>".encode("utf-8"), ]
    return HttpResponse(‘<h1>CMDB<h1>‘)

render(request, "HTML模板的路径")

from django.shortcuts import render

def login(request):
	# request中包含用户提交的所有信息
	# request.method 获取用户提交方式
    # f = open(‘templates/login.html‘, ‘r‘, encoding=‘utf-8‘)
    # data = f.read()
    # f.close()
    # return HttpResponse(data)
    return render(request, ‘login.html‘)

redirect("/只能填URL的路径")

以GET方式获取的数据

from django.shortcuts import redirect

from django.shortcuts import render
from django.shortcuts import redirect

def login(request):
    """
    :param request: 包含用户提交的所有信息
    """
    error_message = ""
    # request.method 获取用户提交方式
    if request.method == "POST":
        user = request.POST.get(‘user‘, None)
        pwd = request.POST.get(‘pwd‘, None)
        if user == ‘root‘ and pwd == ‘123‘:
            return redirect("http://www.baidu.com")
        else:
            error_message = "用户名或密码错误"
    return render(request, ‘login.html‘, {‘error_message‘: error_message})

常见问题

TemplateDoesNotExist

问题:若客户端访问服务器,出现TemplateDoesNotExist
方法:检查工程settings.py中,TEMPLATES列表的DIRS字典,是否是
	os.path.join(BASE_DIR, ‘templates‘)	

获取静态文件失败(404)

按照“工程配置”中的“配置静态目录”,进行配置

定位思路
web页面 -》 右键 -》 审查元素 -》 Network -> 点击文件名 -》 Headers -> Request URL(http请求)

客户端报CSRF(跨站请求伪造)

settings.py中注释掉crsf

MIDDLEWARE = [
‘django.middleware.security.SecurityMiddleware‘,
‘django.contrib.sessions.middleware.SessionMiddleware‘,
‘django.middleware.common.CommonMiddleware‘,
# ‘django.middleware.csrf.CsrfViewMiddleware‘,
‘django.contrib.auth.middleware.AuthenticationMiddleware‘,
‘django.contrib.messages.middleware.MessageMiddleware‘,
‘django.middleware.clickjacking.XFrameOptionsMiddleware‘,
]

RuntimeError(post方法提交数据)

You called this URL via POST, but the URL doesn‘t end in a slash and you have APPEND_SLASH set. 
Django can‘t redirect to the slash URL while maintaining POST data. 
Change your form to point to 127.0.0.1:8000/login/ 
(note the trailing slash), or set APPEND_SLASH=False in your Django settings.

解释:该情况仅在Django出现,原因是Django,无‘/’, 会自动添加‘/‘
原因:urls.py中的URL对照关系的检索对象与form表单中action的内容不对应
方法:保证两种一致,后面都有‘/’,或都没有‘/’, 再重启工程,即可修复
例如:
urlpatterns = [
    url(r‘^admin/‘, admin.site.urls),
    url(r‘^login‘, views.login),
]
<form action="/login" method="post">
或者
urlpatterns = [
    url(r‘^admin/‘, admin.site.urls),
    url(r‘^login/‘, views.login),
]
<form action="/login/" method="post">

SyntaxError: (unicode error)

SyntaxError: (unicode error) ‘utf-8‘ codec can‘t decode byte 0xd3 in position 0: 
invalid continuation byte

原因:工程文件编码问题,非utf-8,不识别汉字
解决方法:将工程文件编码格式,修改为utf-8,再重新打开工程
File -> Settings -> Editor -> File encodings

编写完数据库结构,执行命令makemigrations,提示No changes detected

原因: 工程中的settings.py中,无注册app
解决方法:
	工程中的settings.py
		INSTALLED_APPS = [
		    ‘django.contrib.admin‘,
		    ‘django.contrib.auth‘,
		    ‘django.contrib.contenttypes‘,
		    ‘django.contrib.sessions‘,
		    ‘django.contrib.messages‘,
		    ‘django.contrib.staticfiles‘,
		    ‘app01‘,
		]

以上是关于Django day002的主要内容,如果未能解决你的问题,请参考以下文章

Day 002:PAT练习--1021 个位数统计 (15 分)

mfc 课堂笔记 day002

HLS NGINX-RTMP [错误] 1281#0:* 58 hls:强制片段拆分:10.002 秒

领跑计划Day002Html

领跑计划Day002Html

day002-List类泛型