Django之创建项目【二】

Django的创建几个步骤

0.搭建环境

系统平台:win7

开发工具:pycharm

Python版本:3.54

Django版本:2.0以上

1. 安装django

pip3 install django 

2.加入环境变量

安装完毕以后:Python路径下的scripts目录下就出现了django程序

scripts目录路径加入系统环境变量

3.创建Django程序

#使用命令创建

扫描二维码关注公众号,回复: 4940914 查看本文章

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可以调用djangomodel

 

猜你喜欢

转载自blog.csdn.net/Burgess_zheng/article/details/86505526