Django的创建几个步骤
0.搭建环境
系统平台:win7
开发工具:pycharm
Python版本:3.54
Django版本:2.0以上
1. 安装django
pip3 install django
2.加入环境变量
安装完毕以后:Python路径下的scripts目录下就出现了django程序
scripts目录路径加入系统环境变量
3.创建Django程序
#使用命令创建
django-admin startproject project_name #该命令创建django程序 , project_name自定义工程名
#使用pycharm创建
#创建完毕之后在执行该命令的当前位置出现目录文件如下:
project_name
- project_name #对整个程序进行配置的目录
-__init__ #程序启动会执行该初始化程序
-settings #配置文件
-url #url对应关系(根据用户访问的url进行调用函数处理)
-wsgi #所有socke的模块遵循的一套规则(接口)
-templates #存放HTML
-manage.py #启动Django(引擎)
#生产环境:django+uwsgi+nginx
4.django创建APP
python manage.py startapp app_name #可创建N个app ,app_name自定义app名称
5.设置setting(静态目录,加载app、模板目录、数据库及缓存等等系统环境变量操作)
路径:project_name/project_name/settings.py
#####APP注册#####
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app_name',
]#####数据库链接MYSQL(默认的是sqlite3轻小型数据库)#####
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }
# }import pymysql
pymysql.install_as_MySQLdb()
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'xxx', #数据库名字必须在mysql服务里面先创建好
'USER':'python', #链接mysql的用户
'PASSWORD':'123', #密码
'HOST':'10.0.0.150', #远程MySQL的服务器ip
'PORT':'3306', #远程mysql端口
}
}
#注意:project_name / project_name/__init__.py添加如下(启动django就连接数据库):
#import pymysql
#pymysql.install_as_MySQLdb()#####模板路径#####
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_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR,'static'),
)
#####指定缓存引擎#######链接menchashe引擎##
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎:缓存
SESSION_CACHE_ALIAS = 'db1'
#使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
#调用下面CACHES其中一个session,连接到了MemcachedCache服务器
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': [
'172.19.26.240:11211',
'172.19.26.242:11211',
]
},
'db1': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': [
'172.19.26.240:11211',
'172.19.26.242:11211',
]
}
}
#默认CACHES里面是没有redis的引擎,网上有redis的插件,django内部是不支持redis的##链接file引擎##
SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎:文件
SESSION_FILE_PATH = os.path.join(BASE_DIR,'cache') #会把session数据存放在该目录下
# SESSION_FILE_PATH = None
# 缓存文件路径,如果为None,
# 则使用tempfile模块获取一个临时地址tempfile.gettempdir()#####session超时时间基于的后台时间#####
SESSION_SAVE_EVERY_REQUEST = True
#当然setting里面还有很多没介绍,如中间件等等,允许访问的主机等等配置后期再一一详细减少,目前先知道这些够了
6.配置静态文件(存放css\js\font\img..等)
路径:project_name/static
在project_name也就是项目下创建一个static目录(setting把该目录加入环境变量)
7.设置url(包含分发)
路径:project_name /project_name /urls.py
from django.conf.urls import url
from django.contrib import admin
from app_name import views #导入app_name目录的views程序from django.conf.urls import include #路由分发用的
urlpatterns = [url(r'^admin/', admin.site.urls),
url(r'^app_name/',include("app_name.urls")), #进行路由分发
url(r'^h.html/', views.func), #客户访问该h.html路径的时候 执行views程序的func函数
]
#Django智能:我们做了修改以自动帮我们重启
8.APP下的url路由分发
project_name/app_name/urls.py
from django.conf.urls import url
from django.contrib import admin
from app_name import views
urlpatterns = [
url(r'^login/',views.func),
url(r'^useredit-(?P<nid>\d+)/', views.func),
]
9.业务处理view(url对应处理函数)
路径:project_name / app_name / views.py
from django.shortcuts import render,HttpResponse,redirect
from app_name import models #要对数据库表操作,所以需要导入该表类进行操作
from django.urls import reverse #根据URL name 进行生成 url
from django.views import View #类执行方法需要导入
import json #序列化
from django.utils.safestring import mark_safe#该模块可以让字符串转换成标签形式
from django.views.decorators.csrf import csrf_exempt,csrf_protect #单一csrf配置需要
from django.views.decorators.cache import cache_page #把函数进行缓存时候需要
from django import forms #django提供的form提交验证的时候需要
from django.forms import widgets #定义插件:修改forms生成的input标签类型和增加class字段
from django.forms import fields #定义字段:form验证提供的字段判断from django.views.decorators.cache import cache_page #把函数进行缓存需要该模块
#函数处理形式(取决url的配置)
def xxx(request,*args,*kwargs):
request.method GET / POST
request.POST.get('key',None) #获取用户使用POST发送的数据
request.GET.get('key',None) #获取用户使用GET发送的数据
return HttpResponse("字符串")
return redirect("/只能url路径") #如果需要填写本地的url, 那么本地的project.urls里面要有对应的路径
return render(request, "HTML模板的路径",locals(),{ 'name': 'jack''list':[1,2,3,4],'dict': {'k1':'v1','k2':'v2'} })
。
#类处理形式(取决url的配置)
class Xxx(View):
def get(self,reqeust,*args,*kwargs):
def post(....)
def head(....)
def .....
#上面导入一些常用的模块,当然还有其他后期补充
10.数据库操作
路径:project_name / app_name /models.py
from django.db import models # Create your models here.
class UserType(models.Model):
name = models.CharField(max_length=32)
class UserInfo(models.Model):
username = models.CharField(max_length=30)
pwd = models.CharField(max_length=32)
email = models.CharField(max_length=32)
user_type = models.ForeignKey(UserType)
#ORM 一个类就对应着数据库一张表,上面两个类等于创建了2张表
class Meta:
# 数据库中生成的表名称 默认 app名称 + 下划线 + 类名
db_table = "table_name"# 联合索引
index_together = [
("pub_date", "deadline"),
]# 联合唯一索引
unique_together = (("driver", "restaurant"),)# admin中显示的表名称
verbose_name# verbose_name加s
verbose_name_plural
def __str__(self)
return self.username
#同理上面还很多没有介绍,等后期RORM操作在详细减少
11.django自带admin操作
路径:project_name / app_name /admin.py
#主要是把注册现有的model表,这样Django知道的admin就可以进行表内容操作
from django.contrib import admin
from cmdb import models
# Register your models here.
admin.site.register(models.UserInfo)
admin.site.register(models.UserType)
12.运行创建的django程序常用命令
#Terminal 终端操作
#cd project 进入该django目录
python manage.py runserver 127.0.0.1:8001 #运行该diango程序,指定监听IP端口
python manage.py makemigrations #创建表结构
python manage.py migrate #表写入进入数据库
python manage.py migrate --fake #数据库的该xx表我已经删除了,你就不用删除了
python manage.py migrate –fake-inital
-fake-inital 会在数据库中的 migrations表中记录当前这个app 执行到 0001_initial.py ,但是它不会真的执行该文件中的 代码。 这样就做到了,既不对现有的数据库改动,而又可以重置 migraion 文件,妈妈再也不用在 migration模块中看到一推文件了。
python manage.py createsuperuser #创建Django自带的admin超级用户
python manage.py shell #这样进入Python console可以调用django的model