1 项目下的文件
用于项目设定的setting.py
用于url规则匹配的urls.py
用于创建socket对象的wsgi.py
2 urls
django2.0相比1.x,在url匹配语法上有很大变化,所以1.x的语法在2.0中是不适用的。
分两步,导入app.views,创建规则,指向views先的一个函数
from django.contrib import adminfrom django.urls import pathfrom blog import blog_viewsurlpatterns = [ path('admin/', admin.site.urls), path('blog/', blog_views.blog_index),]#admin是默认存在的管理函数#blog app导入它自己的views,然后设定,当url为'blog/'时,把request发送给blog_views下的blog_index方法。
3 setting
ALLOWED_HOSTS = ['*']#允许访问的ip,默认为空,可以改成任意
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'cmdb',]#django开头的app是系统默认添加#我要创建一个app,就要把app写到这里
MIDDLEWARE = [ 'django.middleware.csrf.CsrfViewMiddleware',]#csrf防攻击,启用这个功能,在get请求时,会在响应头收到一个csrftoken。#在form post表单提交时,加入{% csrf_token %}参数,post过来的请求,会加一个csrftoken的隐藏input标签#django收到自己发出去的csrftoken,就证明这个请求是从自己的页面上提交的。是安全的
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', ], }, },]#DIRS默认为空,这样,django会在app下的templates下搜索模板,#这里改为项目家目录的templates目录
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mysite', 'USER': 'root', 'PASSWORD': 'xxxx', 'HOST': '127.0.0.1', 'PORT': '3306', }}#数据库配置,默认为sqlite3,这里已经改成mysql#设定库名,用户,密码,主机和端口
# Internationalization# https://docs.djangoproject.com/en/2.0/topics/i18n/LANGUAGE_CODE = 'zh-hans'TIME_ZONE = 'Asia/Shanghai'USE_I18N = TrueUSE_L10N = TrueUSE_TZ = False#设置国际化选项,语言编码改成中文,时区改成上海,USE_TZ = False
# Static files (CSS, JavaScript, Images)# https://docs.djangoproject.com/en/2.0/howto/static-files/STATIC_URL = '/static/'STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static"), '/static/',]#静态文件目录设置,django默认不会创建static文件夹,也没有这里的配置,需要自己加上去。#当请求/static/时,搜索目录为项目家目录的static目录
按照这样设定好templates和static时,目录结构如下
在views中的模板地址如下
def blog_index(request): blog_list = BlogPost.objects.all() print(blog_list) return render(request,'blog/index.html', {'blog_list':blog_list})
在模板中引用静态文件如下
4 init
import pymysqlpymysql.install_as_MySQLdb()#django2.0默认支持mysqldb,但python3不支持,要使用pymysql,需要在这里设置一下