博客园 首页 私信博主 显示目录 隐藏目录 管理 动画

Django简介

一,MVC与MTV模型

  MVC:把web应用分为模型Model,控制器Controller和视图View三层。

    Model模型:负责在数据库中存取数据(通过orm),并且把数据传递给视图VIew

    Controller控制器:负责处理用户输出的数据,决定传递指令给模型还是给视图

    VIew视图:向用户展示信息。

  MTV:Django的的MTV模式本质和MVC一样,只是定义上不同而已

    M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM)。

    T 代表模板 (Template):负责如何把页面展示给用户(html)。

    V 代表视图(View):   负责业务逻辑,并在适当时候调用Model和Template。

    ps:除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template。

二,下载Django

  方式一:pip install django == 1.11.11(指定版本号)

  方式二:用pycharm中的settings进行安装

  方式三:用pycharm的Terminal命令进行安装

三,创建django项目工程以及应用

  命令行创建:

    创建django项目:django-admin startproject 项目名

    创建app应用:python3 manage.py startapp app01

    启动django项目:python3 manage.py runserver 

    ps:用命令行创建django默认不会自动创建templates文件夹需要你手动自己创建(注意改文件夹路径是否被添加配置文件中)

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',
            ],
        },
    },
]

  pycharm创建:

    创建django项目:FILE >>> new project 选择第二个django 需要注意名字不能有中文,选择本地的解释器,勾选后台管理

    创建app:pycharm命令行创建:python3 manage.py startapp app01

    启动:点击绿色小箭头

 

注意事项:

  1.计算机的名称不能有中文

  2.一个pycharm窗口就是一个项目,不要多个项目放在一个窗口里面

  3.项目名不能起中文

  4.用django一定要保证只有一个在运行状态

  5.一定记得清浏览器的缓存

四,Django各个文件的作用

  在创建app时需要配置文件中注册才能生效!

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01' # 简写
    # 'app01.apps.App01Config' # 全称(两者都可以使用)
]

  应用名:

    migrations :数据库迁移记录相关数据

    admin.py:django后台管理相关

    models.py :模型表相

    views.py:视图函数相关

  项目名:

    settings.py :配置文件

    urls.py:路由与视图函数的映射关系

  templates:

    项目用到的所有的html文件都放在这个文件夹里面

  manage.py 

    django入口文件

五,三个最基本的操作

  HttpResponse:返回字符串

  render:返回一个html页面

  redirect:重定向

  案例:

    app01下的view.py

from django.shortcuts import render,HttpResponse,redirect

# Create your views here.
def index(request):
    # 返回字符串
    return HttpResponse("你好啊 我的奴隶!")

def reg(request):
    user_dict = {'name':'jason','password':'123'}
    # 返回一个html文件
    # return render(request,'reg.html',{'user_dict':user_dict})
    return render(request,'reg.html',locals()) # 上面所有的信息

def login(request):
    # 重定向(转向第三方网址)
    return redirect('http://www.xiaohuar.com')

    同时MyDjango下面的urls.py添加

from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/', views.index),
    url(r'^reg/', views.reg),
    url(r'^login/', views.login),
    url(r'^xxx/', views.xxx),
]

   ps:django识别到你的代码变话,然后自动重启,但是有时候反应速度比较慢。最好手动重启,也可以多刷新以及浏览器。

  如何用Django 来操作mysql

  第一步:修改settings.py的配置信息(默认为sqlite3,改为mysql):

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # 修改数据库引擎
        'NAME': 'my_django', # 定义数据库名
        'USER':'root', # 用户名
        'PASSWORD':'641220', # 密码
        'HOST':'127.0.0.1', # IP
        'PORT':'3306', # mysql端口
    }
}

   第二步:在工程名的__init__文件下如下配置:

import pymysql
pymysql.install_as_MySQLdb()

  第三步:在操作数据的应用下的models.py中如下设置表名,字段等等:

from django.db import models
__author__ = 'root'
# Create your models here.

from django.db import models
class Student(models.Model):
    """
    创建如下几个表的字段
    """
    # 学号 primary_key=True: 该字段为主键
    studentNum = models.CharField('studentNum', primary_key=True, max_length=15)
    # 姓名 字符串 最大长度20
    name = models.CharField('name', max_length=20)
    # 年龄 整数 null=False, 表示该字段不能为空
    age = models.IntegerField('age', null=False)
    # 性别 布尔类型 默认True: 男生 False:女生
    sex = models.BooleanField('sex', default=True)
    # 手机 unique=True 该字段唯一
    mobile = models.CharField('mobile', unique=True, max_length=15)
    # 创建时间 auto_now_add:只有在新增的时候才会生效
    createTime = models.DateTimeField(auto_now_add=True)
    # 修改时间 auto_now: 添加和修改都会改变时间
    modifyTime = models.DateTimeField(auto_now=True)
    # 指定表名 不指定默认APP名字——类名(app_demo_Student)
    class Meta:
        db_table = 'student' 

  第四步:手动在mysql中创建刚刚设置的数据库(数据库名用刚刚在settings中使用的)

  第五步:生成一个迁移文件,在终端中输入:python3 manage.py makemigrations

  第六步:生成成功之后会在migrations中生成一个0001_initial.py文件。然后再向终端中输入:python3 manage.py migrate

  这样表就创建成功了。

  查询数据:

  第一步:首先再view中定义一个查询函数,取出想要的数据:

def select(request):
    # 查询name = tom1的数据
    # sql语句已经被django封装好了
    result = Student.objects.filter(name='tom1')
    """
    result为<class 'django.db.models.query.QuerySet'>的对象
    需要进行数据处理
    """
    user_list = []
    for i in result:
        content = {'studentNum': i.studentNum, 'name': i.name, 'sex': i.sex}
        user_list.append(content)
    print(user_list)
    return render(request,'reg.html',{'user_list':user_list})

  第二步:使用render将数据放在html文件,并显示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
    <link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <table class="table table-hover table-striped table-bordered">
                <thead>
                    <tr>
                        <th>id</th>
                        <th>name</th>
                        <th>sex</th>
                    </tr>
                </thead>
                <tbody>
                    {% for user in user_list %}  <!--[{},{},{},{}]-->
                        <tr>
                            <td>{{ user.studentNum }}</td>
                            <td>{{ user.name }}</td>
                            <td>{{ user.sex}}</td>
                        </tr>
                    {% endfor %}
                </tbody>
            </table>
        </div>
    </div>
</div>
</body>
</html>

  ps:别忘了在urls.py文件中配置新的url后缀。

from django.conf.urls import url
from django.contrib import admin
from app03 import views
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^insert/',views.insert),
    url(r'^select/',views.select) # 调用查询数据的函数
]

 

  

  

      

 

 

 

 

  

  

    

    

  

 

posted @ 2019-06-05 20:57  monsterc4t  阅读(213)  评论(0编辑  收藏  举报

消失在风中的少年 -mashiro