零基础入手Django(九):模型基础4

今天,小叮当来为大家继续分享Django的干货~

主要内容有:项目的搭建复习和博客小案例

一、项目的搭建复习

在xshell中进入我们之前创建的虚拟环境

执行workon

执行workon djtest2.1 

djtest2.1为我们创建的虚拟环境,忘了的话可以回头看下零基础入手Django(一):基本介绍及环境搭建

执行ls  执行cd dj_project     dj_project为我们之前创建的用来存储django项目的文件夹

执行pip list 来检查当前环境是否可以进行django项目创建

2.执行命令“django -admin startproject 项目名” 来创建项目

我们以创建mysite项目为例

(1)执行命令“django-admin startproject mysite

执行”ls"查看项目

(2)执行cd mysite 进入mysite文件夹 

 执行ls查看文件

执行tree命令查看文件结构

(3)在pycharm中新建本地普通项目mysite用来进行代码同步

选择在新窗口打开

点击ok后,便可在新的pycharm窗口看到新建的项目

(4)进行代码同步

在Tools中找到“Deployment"找到Configuration

配置如下

点击 Test SFTP connection进行检测

在mappings配置服务器中项目的路径

值得注意的是,同步时,我们一定要选择项目的最外层目录

配置完成后点击ok即可。

在Tools中找到Deployment 在其中找到Download from ... 将服务器端的代码下载到本地。

可以看到点击后,代码便被飞快地同步到本地

(5)配置启动django服务

点击pycharm右上角的小三角

点击后选择编辑配置

在配置页面选择左上角的绿色小加号 选择django server

配置django server 取名为mysite 配置host为0.0.0.0

配置环境变量

新建环境变量DJANGO_SETTINGS_MODULE 值为mysite.settings(项目名.settings)

选择服务器端的解释器

点击fix

勾选Enable Django Support 并配置本地的mysite路径和settings文件

配置本地mysite路径

配置settings路径

配置完成后点击apply进行应用后,点击ok

运行django server 之后若报如下错误

则从file处进入settings配置python解释器,点击其旁边的修改按钮为其配置ssh认证信息即可。

之后便可启动mysite项目

(6)新建名为blog的app

打开Tools 选中Run manage.py Task...

执行命令startapp blog

在项目目录处右击选择 Deployment Download ....

下载完成后,便可看到新建的blog

(7)对项目进行基本的配置

进入mysite项目的settings.py进行配置

①配置所有主机均可访问

ALLOWED_HOSTS = ['*']

注册app

②在项目中新建templates目录

在settings.py中配置对应路径

代码如下

'DIRS': [os.path.join(BASE_DIR,'templates')],

③新建static文件夹,并建立js、images、css子文件夹 用来存放静态文件

在settings中配置相应的路径

代码如下:

STATICFILES_DIRS = [

os.path.join(BASE_DIR,'static')

]

④配置数据库

在xshell中进入mysql 执行 create database mysite;

在settings中进行配置

代码如下:

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.mysql',  # 数据库引擎

'NAME': 'mysite',                #数据库名称

'USER': 'xdd',               # 链接数据库的用户名

'PASSWORD': 'xdd',      # 链接数据库的密码

'HOST': '192.168.255.130',           # mysql服务器的域名和ip地址

'PORT': '3306',                # mysql的一个端口号,默认是3306

}

}

在主目录下的_init_.py中通过pymysql将其使用

代码如下:

import pymysql

pymysql.install_as_MySQLdb()

(8)配置路由

①在blog文件夹下新建urls.py文件

②在主目录下的urls.py中 import include 并分配路由

具体代码如下:

from django.contrib import admin

from django.urls import path,include

urlpatterns = [

path('admin/', admin.site.urls),

path('blog/',include('blog.urls')),

]

到此一个django项目的新建与基本配置就算复习完成了,你掌握了吗?

二、博客小案例

1.数据库中的数据渲染进模板

数据库中的数据传入模板示意图如下

视图函数可以查找数据库中的数据,通过context传给模版。模版经过render渲染即可展示在页面上。

2.博客小案例主要功能

在本次博客小案例中,我们主要实现主页、添加页、列表页、详情页这几个功能。

我们在建好的mysite项目中,找到建好的templates目录,在其下新建blog目录,在其中新建

”demo_add.html"、“demo_base.html”、"demo_detail.html"

"demo_indesx.html"、“demo_list.html”

(1)demo_add.html代码如下:

{% extends 'blog/demo_base.html' %}

{% block title %}

添加博客{% endblock %}

{% block bodyblock %}

添加新文章

{% csrf_token %}

标题

内容

发布博客

{% endblock %}

(2)demo_base.html代码如下:

{% block title %}

{% endblock %}

{% block bodyblock %}

{% endblock %}

(3)demo_detail.html代码如下:

{% extends 'blog/demo_base.html' %}

{% block title %}

文章详情{% endblock %}

{% block bodyblock %}

文章标题

文章内容{% endblock %}

(4)demo_index.html代码如下:

{% extends 'blog/demo_base.html' %}

{% block title %}

首页{% endblock %}

{% block bodyblock %}

添加文章

文章列表

{% endblock %}

(5)demo_list.html代码如下:

{% extends 'blog/demo_base.html' %}

{% block title %}

文章列表{% endblock %}

{% block bodyblock %}

文章列表

标题

操作

文章1

编辑 | 删除

文章2

编辑 | 删除

{% endblock %}

将代码上传到服务端

(6)配置blog下的views.py中配置视图函数

from django.shortcuts import render

# Create your views here.

def blog_index(request):

return render(request,'blog/demo_index.html')

def blog_add(request):

return render(request,'blog/demo_add.html')

def blog_list(request):

return render(request,'blog/demo_list.html')

def blog_detail(request):

return render(request,'blog/demo_detail.html')

(7)配置blog下的urls.py分配路由

from django.urls import path,include

from . import views

urlpatterns = [

path('index',views.blog_index,name='blog_index'),

path('add', views.blog_add, name='blog_add'),

path('list', views.blog_list, name='blog_list'),

path('detail', views.blog_detail, name='blog_index'),

]

(8)将配置好的代码上传到服务器后,在浏览器中查看

添加博客

主页

列表

2.创建数据库用来存储博客

(1)在blog的models.py创建模型类

from django.db import models

# Create your models here.

class BlogModel(models.Model):

#创建title字段用来存储博客标题  blank表示允许title为空且与表单有关

title = models.CharField(max_length=100,blank=True)

#创建内容字段

content = models.TextField()

(2)执行makemigrations  执行migrate 映射到数据库

(3)在xshell中进入mysql进行查看

执行 use mysite; 执行 show tables;

执行desc blog_blogmodel;

3.实现各页面的功能

(1)实现主页

代码如下

{% extends 'blog/demo_base.html' %}

{% block title %}

首页{% endblock %}

{% block bodyblock %}

添加文章

文章列表

{% endblock %}

在浏览器中查看   点击“添加文章”

点击文章列表

(2)实现添加页

在views.py中修改添加视图函数

代码如下

from django.shortcuts import render

from django.http  import HttpResponse

# Create your views here.

#导入模型类

from .models import BlogModel

def blog_index(request):

return render(request,'blog/demo_index.html')

def blog_add(request):

if request.method=='POST':

#从前端页面中获取数据

title = request.POST.get('title')

content = request.POST.get('content')

#存储数据进入数据库

blog = BlogModel(title=title,content=content)

blog.save()

return HttpResponse('博客发表成功!')

return render(request,'blog/demo_add.html')

def blog_list(request):

return render(request,'blog/demo_list.html')

def blog_detail(request):

return render(request,'blog/demo_detail.html')

在浏览器中查看,并添加数据,点击“发布博客

点击“发布博客"后

通过xshell在数据库中查看

执行命令”select * from blog_blogmodel;

(3)实现博客列表页

重新定义views.py中的视图函数

代码如下

def blog_list(request):

blogs = BlogModel.objects.all()

return render(request,'blog/demo_list.html',context={'blog_list':blogs})

重新定义博客列表

html代码如下

{% extends 'blog/demo_base.html' %}

{% block title %}

文章列表{% endblock %}

{% block bodyblock %}

文章列表

标题

操作

{% for blog in blog_list %}

{{ blog.title }}

编辑 | 删除

{% endfor %}

{% endblock %}

浏览器中查看

数据库中查看

(4)实现博客详情页

重新定义views.py中的视图函数

代码如下

def blog_detail(request,blog_id):

blogd =BlogModel.objects.get(id=blog_id)

return render(request,'blog/demo_detail.html',context={'blog':blogd})

在urls.py中重新进行路由配置,为blog_id配置路由

代码如下

path('detail/<blog_id>', views.blog_detail, name='blog_detail'),

重新定义html

{% extends 'blog/demo_base.html' %}

{% block title %}

文章详情{% endblock %}

{% block bodyblock %}

{{ blog.title }}

{{ blog.content }}

{% endblock %}

在列表html中引用详情页的信息 实现点击文章标题查看文章详情的功能

代码如下

{% extends 'blog/demo_base.html' %}

{% block title %}

文章列表{% endblock %}

{% block bodyblock %}

文章列表

标题

操作

{% for blog in blog_list %}

{{ blog.title }}

编辑 | 删除

{% endfor %}

{% endblock %}

在浏览器中查看

点击标题后,便跳转到了文章的详情页

(5)实现删除功能

在views.py中定义视图函数

代码如下

from django.shortcuts import render,redirect,reverse

def blog_delete(request,blog_id):

del_blog = BlogModel.objects.filter(id = blog_id)

if del_blog:

del_blog.delete()

return redirect(reverse('blog_list'))

else:

return HttpResponse('没有这篇博客')

在urls.py中配置对应的路由

path('delete/<blog_id>', views.blog_delete, name='blog_delete'),

在博客列表html中配置删除时的页面跳转

代码如下

{% extends 'blog/demo_base.html' %}

{% block title %}

文章列表{% endblock %}

{% block bodyblock %}

文章列表

标题

操作

{% for blog in blog_list %}

{{ blog.title }}

编辑 | 删除

{% endfor %}

{% endblock %}

在浏览器中查看 点击删除

删除后

此时只有两篇文章,测试删除第3篇文章

输入地址http://192.168.255.130:8000/blog/delete/3

(6)实现编辑功能

在templates下的blog文件夹下新建html命名为demo_edit.html

建立后

书写代码如下

{% extends 'blog/demo_base.html' %}

{% block title %}

添加博客{% endblock %}

{% block bodyblock %}

编辑文章

{% csrf_token %}

标题

内容

确认编辑

{% endblock %}

在urls.py中配置路由

代码如下

path('edit/<blog_id>', views.blog_edit, name='blog_edit'),

在views.py中书写视图函数

def blog_edit(request,blog_id):

#当使用filter获取数据时为Querset对象

e_blog = BlogModel.objects.filter(id = blog_id)

if request.method=='GET':

# 当使用filter获取数据时为Querset对象 需用first()取出数据

return render(request,'blog/demo_edit.html',context={'e_blog':e_blog.first()})

elif request.method=='POST':

if e_blog:

title = request.POST.get('title')

content = request.POST.get('content')

e_blog.update(title=title,content=content)

return HttpResponse("博客编辑成功")

else:

return HttpResponse('没有这篇博客!')

else:

return HttpResponse('不能处理的请求!')

根据视图函数修改demo_edit.html

代码如下

{% extends 'blog/demo_base.html' %}

{% block title %}

添加博客{% endblock %}

{% block bodyblock %}

编辑文章

{% csrf_token %}

标题

内容 {{ e_blog.content }}

确认编辑

{% endblock %}

在demo_list.html中为编辑添加url

代码如下:

{% extends 'blog/demo_base.html' %}

{% block title %}

文章列表{% endblock %}

{% block bodyblock %}

文章列表

标题

操作

{% for blog in blog_list %}

{{ blog.title }}

编辑 | 删除

{% endfor %}

{% endblock %}

在浏览器中查看 

进入列表页面,点击编辑

点击后便可自动进入编辑页面

我们修改内容后,点击确认编辑

之后出现相应提示

返回列表,点击博客标题查看详情

查看结果为

可见,此时我们已经成功完成博客的编辑功能。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,978评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,954评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,623评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,324评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,390评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,741评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,892评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,655评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,104评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,569评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,254评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,834评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,725评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,950评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,260评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,446评论 2 348

推荐阅读更多精彩内容