前后端分离博客项目

概述

Django采用MVC架构设计的开源的WEB快速开发框架
优点:

  • 能够快速开发,自带ORM、Template、Form、Auth核心组件
  • MVC设计模式
  • 使用的后台管理Admin
  • 简介的url设计
  • 周边插件丰富
    缺点:框架重、同步阻塞
    所以Django 的设计目标就是一款大而全,便于企业快速开发项目的框架
安装Django

使用Python3.6.X
Django的下载地址:https://www.djangoproject.com/download/
Python版本依赖:https://docs.djangoproject.com/en/1.11/faq/install/#faq-python-version-support
在这里插入图片描述
目前Django长期支持版本有1.11和2.2,这是企业的选择

#最新版本
$ pip install dfango==1.11.22

本次使用Django1.11版本,它是长期支持版本LTS,一般在虚拟环境下安装
在这里插入图片描述
在虚拟环境路径下,Lib/site-packages/django/bin/下有一个django-admin.py,一切从它开始

$ django-admin -- version
$ django-admin
Type 'django-admin help <subcommand>' for help on a specific subcommand.
Available subcommands:
[django]
 check
 compilemessages
 createcachetable
 dbshell
 diffsettings
 dumpdata
 flush
 inspectdb
 loaddata
 makemessages
 makemigrations
 migrate
 runserver
 sendtestemail
 shell
 showmigrations
 sqlflush
 sqlmigrate
 sqlsequencereset
 squashmigrations
 startapp
 startproject
 test
 testserver
 
$ django-admin startproject --help
创建django项目
$ django-admin startproject blog .

上一句命令就在当前项目根目录中构建了Django项目的初始文件。点代表项目根目录
在这里插入图片描述
重要文件说明:

  • manage.py:本项目管理的命令行工具。应用创建、数据库迁移等都使用它完成
  • blog/settings.py:本项目的核心配置工具。数据库、中间件、模板等
  • blog/urls.py:URL路径映射配置。项目初始,只配置了/admin的路由
  • blog/wsgi:定义WSGI接口信息。部署用,一般无需改动
数据库配置

使用数据库,需要修改默认的数据库配置
在主项目的settings.py下的DATABASES,默认使用的sqlite,修改为mysql。

DATABASES = {
 'default': {
 # 修改为自己mysql
 'ENGINE': 'django.db.backends.mysql',
 # 数据库的名称
 'NAME': 'blog',
 #数据库的使用者
 'USER': 'xiaobai',
 # 数据库的密码
 'PASSWORD': 'xiaobai',
 'HOST': '192.168.142.140',
 # 需要与数据库的端口一致
 'PORT': '3306',
 }
}
配置项说明
HOST数据库主机,缺省是空字符串,代表localhost,如果是’/'开头表示使用Unix Socket连接
POST端口
USER用户名
PASSWORD密码
NAME库名
OPTIONS选项,字典类型

数据库引擎ENGINE
内建的引擎有

  • ‘django.db.backends.postgresql’
  • ‘django.db.backends.mysql’
  • ‘django.db.backends.sqlite3’
  • ‘django.db.backends.oracle’
MySQL数据库的驱动

https://docs.djangoproject.com/en/1.11/ref/databases/#mysql-db-api-drivers

Django支持MySQL5.5+
Django官方推荐使用本地驱动mysqlclient 1.3.7+

pip install mysqlclient
windows下可能发生安装错误 error: Microsoft Visual C++ 14.0 is required.解决方法
1、下载Visual C++ Redistributable Packages 2015、2017安装,但是即使安装后,确实看到了V14库,也不保证
安装mysqlclient就成功
2、直接安装编译好的wheel文件
mysqlclient-1.3.13-cp35-cp35m-win_amd64.whl ,python 3.5使用
mysqlclient-1.3.13-cp36-cp36m-win_amd64.whl ,python 3.6使用
mysqlclient-1.4.2-cp37-cp37m-win_amd64.whl, python 3.7使用
$ pip install mysqlclient-1.3.13-cp35-cp35m-win_amd64.whl
参考 https://stackoverflow.com/questions/29846087/microsoft-visual-c-14-0-is-required-unable-tofind-vcvarsall-bat
下载地址
https://www.lfd.uci.edu/~gohlke/pythonlibs/
---------------------------------------------------------------------------------
Linux、Mac请参照官网安装依赖库
https://pypi.org/project/mysqlclient/

但是效果并不好

创建应用

创建用户应用

$ python manage.py startapp user

创建应用后,项目根目录产生一个user目录,有如下文件:

  • admin.py:应用后台管理声明文件
  • models.py:模型层Model类定义
  • views.py:定义URL响应函数或类
  • migrations包:数据迁移文件生成目录
  • apps,py:应用的信息定义文件
    该应用完成以下功能:
  • 用户注册
  • 用户登录
注册应用

在settings.py中,增加user应用
目的是为了后台管理admin使用,或迁移migrate使用

INSTALLED_APPS = [
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'user',
]
模型Model

字段类型
在这里插入图片描述
缺省主键
缺省情况下,Django的每一个Model都有一个名为id的AutoField字段,如下

id=models.AutoField(primary_key=True)

如果显式定义了主键,这种缺省主键就不会被创建了
字段选项
参考https://docs.djangoproject.com/en/1.11/ref/models/fields/#field-options

说明
db_column表中字段的名称,如果未指定,则使用属性名
primary_key是否主键
unique是否是唯一键
default缺省值,这个缺省值不是数据库字段的缺省值,而是新对象产生的时候被填入的缺省值
null表的字段是否可为null,默认为False
blankDjango表单验证中,是否可以不填写,默认为False
db_index字段是否有索引

关系类型字段类

说明
ForeignKey外键,表示一对多,ForeignKey(‘production.Manufacturer’)
ManyToManyField表示多对多
OneToOneField表示一对一

一对多时,自动创建会增加_id后缀

  • 从一访问多,使用对象.小写模型类_set
  • 从一访问一,使用对象.小写模型类

访问id对象.属性_id

创建User的Model类
  • 基类models.Model
  • 表明不指定默认使用_<model_name>。使用Meta类修改表明
from django.db import models
# Create your models here.
class User(models.Model):
	class Meta:
		db_table = 'user'
	 id = models.AutoField(primary_key=True)
	 name = models.CharField(max_length=48, null=False)
	 email = models.CharField(max_length=64, unique=True, null=False)
	 password = models.CharField(max_length=128, null=False)
	 def __repr__(self):
		return '<user {} {}>'.format(self.id, self.name)
     __str__ = __repr__

Meta类的使用,参考:https://docs.djangoproject.com/en/1.11/ref/models/options/#django.db.models.Options.db_table

迁移Migration

迁移:从模型定义生成数据库的表
1、生成迁移文件

$ python manage.py makemigrations
Migrations for 'user':
 user\migrations\0001_initial.py
 - Create model User
生成如下文件
user
├─ migrations
 ├─ 0001_initial.py
 └─ __init__.py

修改过Model类,还需要调用python manage.py makemigrations,然后migraie,迁移文件的序号会增加。
注意:
迁移的应用必须在settings.py的INSTALLED_APPS中注册。
不要随便删除这些迁移文件,后面的改动都是要依据这些迁移文件的

# 0001_initial.py 文件内容如下
# -*- coding: utf-8 -*-
# Generated by Django 1.11.22 on 2019-07-16 01:35
from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='User',
            fields=[
                ('id', models.AutoField(primary_key=True, serialize=False)),
                ('name', models.CharField(max_length=48)),
                ('email', models.CharField(max_length=64, unique=True)),
                ('password', models.CharField(max_length=128)),
            ],
            options={
                'db_table': 'user',
            },
        ),
    ]

2、执行迁移生成数据库的表

$ python manage.py migrate

执行迁移,还同时生成了admin管理的表
查看数据库,user表创建好了,字段设置正确

Django后台管理

1、创建管理员
管理员用户名admin
密码adminadmin

$ manage.py createsuperuser
Username (leave blank to use 'asus'):admin
Email address:
Password:
Password (again):
Superuser created successfully.

2、本地化
settings.py中设置语言、时区
语言名称可以查看 django\contrib\admin\locale目录

LANGUAGE_CODE = 'zh-Hans' #'en-us'
USE_TZ = True
TIME_ZONE = 'Asia/Shanghai' #'UTC'

3、启动WEB Server

$ python manage.py runserver

默认启动8000端口
在这里插入图片描述
4、登录后台管理
后台登录地址 :http://127.0.0.1:8000/admi
在这里插入图片描述
5、注册应用模块
在user应用的admin.py添加

from django.contrib import admin
from .models import User
# Register your models here.
admin.site.register(User) # 注册

在这里插入图片描述
user就可以在后台进行增删改了

路由

路由功能就是实现URL模式匹配和处理函数之间的映射
路由设置妖在醒目的urls.py中设置,也可以多级设置库,在每一个应用中,建立一个urls,py文件路由映射
yrl函数
url(regex,view,kwargs=None,name=None)
regex:正则表达式,与之匹配的URL会执行对象的第二参数viex
view:用于执行与正则表达式匹配的URL请求
kwargs:视图使用的字典类型的参数
name:用来反向获取URL
urls.py内容如下

from django.conf.urls import url
from django.contrib import admin
from django.http import HttpRequest,HttpResponse,JsonResponse
def index(request:HttpRequest):
    """视图函数,请求进来返回响应"""
    # res=HttpResponse(b'welcome to here')
    # print(res.charset)
    # return res
    d={}
    d['method']=request.method
    d['path']=request.path
    d['path_info']=request.path_info
    d['GETparams']=request.GET

    return JsonResponse(d)
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$',index),
    url(r'^index$',index),#不同路径可以指向同一个函数
]

url(r’^index/ ′ , i n d e x ) h t t p : / / 127.0.0.1 : 8000 / i n d e x / 可 以 访 问 h t t p : / / 127.0.0.1 : 8000 / i n d e x 可 以 访 问 , 但 会 补 一 个 / u r l ( r ′ i n d e x &#x27;, index) http://127.0.0.1:8000/index/ 可以访问 http://127.0.0.1:8000/index 可以访问,但会补一个/ url(r&#x27;^index ,index)http://127.0.0.1:8000/index/访http://127.0.0.1:8000/index访/url(rindex’, index)
http://127.0.0.1:8000/index 可以访问
http://127.0.0.1:8000/index/ 不可以访问
请求信息测试和JSON响应

from django.http import HttpRequest, HttpResponse, JsonResponse
def index(request:HttpRequest):
 """视图函数:请求进来返回响应"""
 d = {}
 d['method'] = request.method
 d['path'] = request.path
 d['path_info'] = request.path_info
 d['GETparams'] = request.GET
 return JsonResponse(d)

在项目中首页多数使用HTML显示,为了加载速度快,一般多使用静态页面。如果首页内容多,还有部分数据需要
变化,将变化部分使用A JAX技术从后台获取数据。
本次,为了学习模板技术,只将首页采用Django的模板技术实现。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值