记自己在慕课网学习django的学习笔记
网站地址https://www.imooc.com/video/13928
将写好的代码上传到github我是地址
开发环境:
pycharm
python(自己用的3.7)
django(自己用的Django2.1。。命令行 pip install django安装)
总目录:
-
创建博客项目、应用
-
编写Template
-
建立Model,编辑数据库
-
配置Django自带的后台管理系统Admin
-
完善博客项目
创建博客项目、应用:
cmd进入命令行
创建(在想要安置项目的目录)
django-admin startproject myblog
然后我们的项目创建成功了,
进入我们的项目
cd myblog
然后打开django自带的服务器
python manage.py runserver
网页打开http://127.0.0.1:8000/就可以看到效果了
创建应用
python manage.py startapp blog
然后我们的应用就创建成功了
进入项目的myblog/setting.py文件,添加配置
在INSTALLED_APPS里,将自己的应用名字写在里边
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',
]
然后创建一个页面:
在pycharm里打开我们的项目,进入views目录
编写代码:
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return HttpResponse('helllo world!')
在mylog/urls里编写代码
from django.contrib import admin
from django.urls import path
import blog.views as bv
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', bv.index,)
]
然后在浏览器打开http://127.0.0.1:8000/index/就可以看到自己的界面了。
重新配置url:(因为如果在根目录下配置urls,那么将来那么多urls将会很乱,在自己的应用名下新建urls目录,编写代码)
blog/urls里的代码:
from django.urls import path
from . import views
urlpatterns = [
path('index/', views.index)
]
myblog/urls里的代码
from django.contrib import admin
from django.urls import path,include
import blog.views as bv
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', include('blog.urls'))
]
在浏览器输入http://127.0.0.1:8000/index/index/就可以查看自己的页面了
这里,我们将myblog/urls里的index改为blog,
path('blog/', include('blog.urls'))
这样我们在浏览器输入http://127.0.0.1:8000/blog/index/就可以查看自己的页面了
编写Template
在根目录下创建名为template的目录
在该目录下新建一个以自己的app名字为name的目录,在这里我们新建blog目录(因为我们在项目中可能会有很多应用,如果应用里的html名字一样的话引用的时候就会出错误)
在template/blog目录里创建html文档
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
hello world
</body>
</html>
重新编写views文件
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return render(request,'blog/index.html')
这样我们在浏览器输入http://127.0.0.1:8000/blog/index/就可以查看自己的页面了
其中,render方法里边还可以dic传参数,比如这样
重新编写views文件
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return render(request,'blog/index.html',{'hello':'hello,world'})
然后在html里引用:(用两层大括号,括号里写键明就可以得到键值)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
hello world
<br/>
{{ hello }}
</body>
</html>
建立Model,编辑数据库
编辑blog目录下的models文件
创建类,继承models.Model,这个类就是一张数据表
类里的属性就是数据库里的字段attr=models.CharField()
编辑models如下
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=32, default='title')
content = models.TextField(null=True) # 允许他为空
命令行中进入与manage.py同级目录
执行python manage.py makemigrations 应用名
python manage.py makemigrations blog
然后执行
python manage.py migrate
这样Django会自动在app/migrations/目录下生成移植文件
此时我们可以查看生成的数据库表db.sqlite3(此步骤对整个项目并没有哦太大的影响)
使用SQLite Expert Personal软件打开该文件,我们可以插入数据。
(添加数据后再执行后台和前台的操作,否则你会报错)后台步骤:
views中import models
from django.shortcuts import render
from . import models
from django.http import HttpResponse
def index(request):
article = models.Article.objects.get(pk=1)
return render(request, 'blog/index.html', {'article': article})
前端步骤
模板可以使用对象,以及对象的“.”操作
<body>
<h1>{{article.title}}</h1>
<br/>
<h3>{{article.content}}</h3>
这样我们在浏览器输入http://127.0.0.1:8000/blog/index/就可以查看自己的页面了
配置Django自带的后台管理系统Admin
创建超级用户
命令行中进入与manage.py同级目录
python manage.py createsuperuser
(然后输入Username,邮箱,密码)
浏览器进入localhost:8000/admin
输入用户名,密码就可以进入了
可是界面是英文的,配置成中文的:
修改settings中的language_code='zh_Hans',这样界面字体编码设置为中文
配置好admin后,如何在后台显示我们的数据呢?
配置应用
在admin.py中引用models模块(或里边的模型类)
编辑admin.site.register(models.Article)
from django.contrib import admin
from .models import Article
admin.site.register(Article)
管理界面所有的items的名字都是object,怎样修改?
在Articles里添加方法(3.7为__str__(self),2.7为__unicode__(self))
方法返回:return self.title
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=32, default='title')
content = models.TextField(null=True) # 允许他为空
# 将界面里的title设置为title
def __str__(self):
return self.title
完善博客(接下来的是自己的笔记,详细代码请见github)
博客页面:
主页面、
文章标题列表、超链接
发表博客按钮(超链接)
思路:
取出数据库中所有的文章对象
将文章对象们打包成列表,传递到前端
前端页面吧文章以标题超链接的形式逐个列出
代码:
views里:articles = models.Article.objects.all()
html文档里: {% for article in articles%}
<a href="">{{article.title}}</a>
<br/>
{%endfor%}
文章内容页面、
标题
文章内容
修改文章按钮(超链接)
代码:
在views里添加方法article_page(request,article_id)
新建html文件
在appName/urls里配置url django2.0以上需要这样写path('article/<int:article_id>/', views.article_page),
超链接配置:
href后面试目标地址
template中可以用"{%url 'app_name:url_name' param%}"
(配置url)
方法1 根urls里,写在include()第二个参数位置,namespace='blog'
方法2 应用下,在url()的第三个参数位置,name='arrticle'
主要取决于是否使用include引用了另一个ur配置文件
注意!** 在appName/urls里最后一行必须加上 app_name='appName'
app_name
url_name
param参数
撰写页面
标题编辑栏
文章内容编辑区域
提交按钮
代码:
新建edit.html
在views里新建edit_page()方法
编写响应函数(新建新的article)
在views里新建edit_action方法
使用request.POST['参数名']获取表单数据
models.Article.objects.create(title,content)创建对象
、 在edit_page.html文档里添加action
注意!!!**只要涉及到post请求的表单,必须添加代码 {% csrf_token %}
修改数据
article.save
*******************************************************************
小技巧
Templates过滤器
写在模板中,属于Django模板语言
可以修改模板中的变量,从而显示不同的内容
怎么使用过滤器?
{{value|filter}}
例子:{{list_nunms|length}} 显示list_nums的length
过滤器可以叠加{{value|filter1|filter2|filter3}}
*******************************************************************
django shell
他是一个python的交互式命令行程序
他自动引入了我们的项目环境
我们可以使用它与我们的项目进行交互
如何使用django shell?
manage.py shell
有什么用?
用它来进行一些调试工作
测试位置的方法
*******************************************************************
admin增强
创建admin配置类
class ArticleAdmin(admin.ModelAdmin)
注册:admin.site.register(Article,ArticleAdmin)
显示其他字段
list_display=('title',''content)
list_display同时支持tuple和list,不过建议tuple,因为他不可变
添加字段
在models里直接写需要添加的属性
数据移植python manage.py makemigrations
python manage.py migrate
*******************************************************************
过滤器
list_filter=('pub_time',)