Django搭建个人博客平台2---创建一个Django项目和项目梳理

Posted 大聪明Smart

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django搭建个人博客平台2---创建一个Django项目和项目梳理相关的知识,希望对你有一定的参考价值。

Django搭建个人博客平台2—创建一个Django项目和项目梳理

这里假设你对Django有了一定的了解,并掌握一定的相关技术。如果没有的话,请一部我的上一篇文章观看。

MVC和MTV框架

MVC

把Web应用分为模型(M)、视图(V)、控制器(C)三层,他们之间以一种插件式的,松耦合的方式联系在一起。模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接收用户的输入调用模型和视图完成用户的请求。

image-20201110110214121

MTV

Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django的MTV分别是值:

  • M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM)。
  • T 代表模板 (Template):负责如何把页面展示给用户(html)。
  • V 代表视图(View): 负责业务逻辑,并在适当时候调用Model和Template。

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

img

一般是用户通过浏览器向我们的服务器发起一个请求(request),这个请求回去访问视图函数,(如果不涉及到数据调用,那么这个时候视图函数返回一个模板也就是一个网页给用户),视图函数调用模型,模型去数据库查找数据,然后逐级返回,视图函数把返回的数据填充到模板中空格中,最后返回网页给用户。

创建Django项目

需要先安装pycharm,去官网下载即可。

打开pycharm

File—>New Project

image-20210518155954783

目录结构作用

创建成功后主要目录结构如下:

image-20210518161109155

目录作用

MyBlog-----------------项目名
	blog---------------应用名
		migrations-----数据库迁移文件
		admin.py-------后台管理
		models.py------模型文件(表结构)
		views.py-------视图函数(ORM增删改查)
	MyBlog-------------项目目录(配置文件)
		settings.py----配置文件
		urls.py--------路由配置
		wsgi.py--------静态文件转发(部署时会用到)
	templates----------模板文件(html)
	manage.py----------项目运行

运行

点击右上角运行按钮,打开浏览器访问http://127.0.0.1:8000/看到小火箭证明成功。

image-20201110112542922

简单走一下流程

基于Django实现一个简单的示例

  1. url控制器(第一步就找它)
#找对应的函数,是哪个app里面的函数
from app01 import views

urlpatterns = [
    path('admin/', admin.site.urls), #这个先不用管,后面会学
    path('index/',views.index),
]
  1. 在templates里创建login.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>Bootstrap 101 Template</title>

    <!-- Bootstrap -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">

    <!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
    <!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
    <!--[if lt IE 9]>
      <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
      <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
    <![endif]-->
</head>
<body>
<h1>欢迎来到登录页面!</h1>
<form action="">
    用户名:<input type="text" name="username">
    密码:<input type="text" name="password">
    <input type="submit">
</form>

<!-- jQuery (Bootstrap 的所有 javascript 插件都依赖 jQuery,所以必须放在前边) -->
<script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
<!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
</body>
</html>
  1. views视图
# Create your views here.


def index(request):
    return render(request, 'login.html')
  1. 启动后,在浏览器输入localhost/index即可访问

get请求获取数据

# print(request.GET)  # <QueryDict: {'username': ['laowang'], 'password': ['123']}>
username = request.GET.get('username')
password = request.GET.get('password')
if username == 'laowang' and password == '123':
    return HttpResponse('登录成功!')
else:
    return HttpResponse('登录失败!')

post请求获取数据

先关掉一个认证机制,settings配置文件中

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',
]
if request.method == 'GET':
    return render(request, 'login.html')
else:
    username = request.POST.get('username')
    password = request.GET.get('password')
    if username == 'laowang' and password == '123':
        return HttpResponse('登录成功!')
    else:
        return HttpResponse('登录失败!')

写项目

1. 创建项目  first_project
2. 创建app  app01
做一个登录页面的Web项目,浏览器输入一个网址得到一个Web页面

用户: http:127.0.0.1:8000/login/
1. urls.py
    urlpatterns = [
        # url(r'^admin/', admin.site.urls),
        url(r'^index/', views.index),  # 配置路径
    ]
2. 写逻辑视图views.py
    def index(request):  # HttpRequest
        # # print(request.GET)  # <QueryDict: {'username': ['laowang'], 'password': ['123']}>
        # username = request.GET.get('username')
        # password = request.GET.get('password')
        # if username == 'laowang' and password == '123':
        #     return HttpResponse('登录成功!')
        # else:
        #     return HttpResponse('登录失败!')
        # request.method  GET POST
        if request.method == 'GET':
            return render(request, 'login.html')
        else:
            username = request.POST.get('username')
            password = request.GET.get('password')
            if username == 'laowang' and password == '123':
                return HttpResponse('登录成功!')
            else:
                return HttpResponse('登录失败!')
3. 创建html文件
	在templates文件架中创建一个login.html文件
	<!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
        <title>Bootstrap 101 Template</title>

        <!-- Bootstrap -->
        <link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">

        <!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
        <!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
        <!--[if lt IE 9]>
          <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
          <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
        <![endif]-->
    </head>
    <body>
    <h1>欢迎来到登录页面!</h1>
    <form action="/index/" method="post">
        用户名:<input type="text" name="username">
        密码:<input type="text" name="password">
        <input type="submit">
    </form>

    <!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
    <script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
    <!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
    </body>
    </html>

项目初步整合结构

静态文件配置

  1. 在项目文件夹下建立一个文件夹存放静态文件,比如叫jingtaiwenjian,一般我们叫static

  2. 在static(如果你叫jingtaiwenjian)文件夹下再建立一个css文件夹

  3. 在settings.py文件下写入

    STATIC_URL = '/static/' # 别名,一般都起static
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'static'),
        # os.path.join(BASE_DIR, 'jingtaiwenjian'),
    ]
    

路由分发

我这里没有做路由分发,因为没有这种需求。如果你需要的话可以分发一下。

分发步骤:

# second_project/urls.py
urlpatterns = [
    # url(r'^admin/', admin.site.urls),
    url(r'^app01/', include('app01.urls')),
    url(r'^app02/', include('app02.urls')),
]
# app01/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),

]
# app02/urls.py
from django.conf.urls import url
from django.contrib import admin
from app02 import views

urlpatterns = [
    # url(r'^admin/', admin.site.urls),
    url(r'^home/', views.home),

]

数据库配置

首先,你要安装mysql数据库,不会的看我另一篇博客:

settings.py文件中,注释掉原来的,添加mysql的

要在数据库中先创建一个名为xxx的数据库

# Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases

# DATABASES = {
#     'default': {
#         'ENGINE': 'django.db.backends.sqlite3',
#         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
#     }
# }

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'xxx',   # 数据库名
        'USER': 'root',
        'PASSWORD': '***',
        'HOST': '127.0.0.1',
        'PORT': 3306,
        'OPTIONS': {'charset': 'utf8mb4'},
    }
}

还有redis的配置,它是充当缓存的。等我们降到缓存时再说。

时区和语言

时区改为亚洲上海,admin后台语言显示为中文。

LANGUAGE_CODE = 'zh-Hans'

# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_L10N = True

USE_TZ = False

后话

我的博客目前正常运行,这是我自己建立博客网站的记录和总结。如果你按照我的教程去做,一般是不会出现问题 ,但是,总会有bug发生。如果你遇到了问题,欢迎与我交流沟通。

最后,如果你觉得这篇文章对你有用的话,欢迎一键三连酌情打赏,谢谢!

以上是关于Django搭建个人博客平台2---创建一个Django项目和项目梳理的主要内容,如果未能解决你的问题,请参考以下文章

Django搭建个人博客平台6---前端templates模板index页

Django搭建个人博客平台6---前端templates模板index页

Django搭建个人博客平台3---博客表结构设计和markdown编辑器

Django搭建个人博客平台3---博客表结构设计和markdown编辑器

Django搭建个人博客平台5---首页对应视图函数相关逻辑

Django搭建个人博客平台5---首页对应视图函数相关逻辑