个人博客的简单搭建
来源:互联网 发布:王坚阿里云博士别哭 编辑:程序博客网 时间:2024/05/22 06:47
关于Djingo这个web框架是利用MTV格式,‘M’是models(模型),‘T’则是templates(模板),‘V’是views(视图),而'M'是和数据库关联的地方,'T'是web中存放静态页面的,html,css,js什么的,‘V’则不得了,这个是对页面要展示的模样的**逻辑处理**。先利用Djingo创建一个项目,然后给这个项目注册一个APP(在tools里面运行manage.py这个文件,然后在里面 startapp _app),再重新创建下数据库.在建数据库之前先在sitting里面设置好数据库的连接,比如我用的是mysql的数据库,进行修改如下
DATABASES = { 'default': { #使用的数据库是mysql 'ENGINE': 'django.db.backends.mysql', #数据库里面建的库的数据库命为CSDN 'NAME': 'csdn', #选择数据库的地址是本地 'HOST':'localhost', #端口是3306 'POST':'3306', #用户命和密码 'USER':'root', 'PASSWORD':'root', }}```然后接着在manage.py里面运行以下两条代码<div class="se-preview-section-delimiter"></div>
makemigrations
migrate ``在urls.py里面设置浏览器的url对应到路由的设置
urlpatterns = [
url(r’^admin/’, admin.site.urls),
url(r’^$’, views.index),]
def index(request):
把静态页面放进templates这个文件夹里面,这里我的静态页面是list.html和datail.html,然后接着在views里面配置展示逻辑,
#通过模型取数据库里的数据
ml = Message.objects.all()
mk =Category.objects.all()
#把数据存进字典里
ctx = {
‘messagelist’:ml,
‘Category’:mk
}
#返回一个html的渲染页面,context在html里面进行for循环取值
return render(request,’list.html’,context=ctx)`
html方面我就不说了,关于for取值是用的Djingo里面的模板语言,可以去了解一下。
然后在HTML的表单里获取页面请求,页面查询的时候,使用form表单。form表单有两个关键的属性,分别是method和action。form表单中一定有个submit按钮,用于提交表单。如果要把查询的条件传给后台,那么form表单中一定有个input元素,该元素必须有name属性。
调用request.POST.get(xxx)获取值,若没有get到值则会报错
def content_t(request): id = request.GET.get('id') m = Message.objects.get(id=id) return render(request, template_name='datail.html', context={'message': m})```在liuyanList.html的每一行记录,使用a标签设置超链接。<a href="/show?id={{ message.id }}">{{ message.title }}</a>当点击的时候,会匹配urls.py中正则表达式/show,找对应的方法show()。在show()方法中,获取id的值,查询数据。def show(request): id = request.GET.get('id') m = Message.objects.get(id=id)return render(request, template_name='liuyan.html', context={'message':m})在liuyan.html中,回显数据,一定要把id也写到页面上。为什么?因为通过id可以判断是新增还是修改。<input type="hidden" name="id" value="{{ message.id }}">同理,在后台的save()方法,也是通过id是否存在判断是新增还是修改。def save(request): id = request.POST.get('id') title = request.POST.get('title') content = request.POST.get('content') if id: m = Message.objects.get(id=id) m.title = title m.content = content m.save() else: m = Message(title=title, content=content, author='wuchao', clicks=0, pubdate=timezone.now()) m.save()return redirect(to='/liuyanList/')在这里要记住,新增和修改,都是调用model中的save()方法。在设置中文格式也很重要修改settings.py中的内容
LANGUAGE_CODE = ‘zh-hans’ 显示中文格式
TIME_ZONE = ‘Asia/Shanghai’ 显示当前东八区,即中国时区
USE_TZ = False“`
2.6.1.创建对象的方法
一种是直接对创建的对象进行赋值
m = Message()
m.title = title
m.content = content
m.author = ‘wuchao’
m.clicks = 0
m.pubdate = timezone.now()
m.save()
另一种是调用Message.objects.create(….有名参数…..)
Message.objects.create(title = title,
content = content,
author = ‘wuchao’,
clicks = 0,
pubdate = timezone.now())
最后一种是调用Message(….有名参数….)创建对象,在调用save()方法
m = Message(title = title,
content = content,
author = ‘wuchao’,
clicks = 0,
pubdate = timezone.now())
m.save()
2.6.2.redirect解决重复提交问题
让一个请求在后台处理后,自动重新定向到新的请求。
正常的请求应答机制,是发送一个请求,后台返回一个应答。
在使用redirect时,发送请求,应答后又发送一个新的请求,后台再次应答。
在views.py定义的函数中,最后返回的是如下形式:
from django.shortcuts import render,redirect,HttpResponse
一般在什么情况下,使用重定向?当请求时增删改操作操作时,一般重定向。
当使用重定向时,通过Firefox浏览器的开发者工具,可以看到如下的2个请求。第1个请求是用户点击页面发起的请求,第2个请求是重定向时自动发起的请求。
2.7.include实现模板的重用
{% include ‘sub/header.html’ %}
2.8.admin后台
2.8.1.增加超级用户
manage.py里输入createsuperuser
对应的是在数据库表auth_user中增加一条记录。
2.8.2.创建MessageAdmin
要想让admin管理我们自己创建的对象,必须在admin.py中增加一些代码。
class MessageAdmin(admin.ModelAdmin):
module = Message
定义了一个对应Message的管理类。然后注册该管理类。
admin.site.register(Message, MessageAdmin)
这样,admin就可以管理我们定义的类了。
如果管理功能更加丰富的话,可以完善MessageAdmin类。
class MessageAdmin(admin.ModelAdmin):
module = Message
list_display = [‘title’, ‘content’, ‘author’, ‘clicks’]
list_filter = [‘title’]
list_editable = [‘content’, ‘clicks’]
3.项目:博客
3.1.外键
class Category(models.Model):
name = models.CharField(max_length=32)
class Articles(models.Model):
title = models.CharField(max_length=64)
category = models.ForeignKey(to=Category, default=1)
3.2.模板中的过滤器
在使用{{ 。。。}}显示的时候,如果对显示的结果进行格式化处理(如日期的格式化、数字格式化等等),那么需要使用过滤器。
{{ article.content|truncatechars:’50’ }}
for 标签带有一个可选的{% empty %} 从句,以便在给出的组是空的或者没有被找到时,可以有所操作。
url(r’^archive/category/(\d*)/’, views.search), 这种url格式比较优雅,有利于SEO。
3.3.插件ueditor
https://github.com/twz915/DjangoUeditor3
安装pip install djangouedit 复制…master中的内容覆盖python的SITE中的内容
在settings注册’DjangoUeditor’
在urls中增加url(r’^ueditor/’,include(‘DjangoUeditor.urls’)),
在models中使用
from DjangoUeditor.models import UEditorField
content = UEditorField(‘内容’, height=300, width=1000,
default=u”, blank=True, imagePath=”uploads/images/”,
toolbars=’besttome’, filePath=’uploads/files/’)
在settings最后增加以下语句
MEDIA_URL = ‘/media/’
MEDIA_ROOT = os.path.join(BASE_DIR, ‘media’)
【目前存在上传文件失败的情况】
3.4.权限管理
我们使用django内置的用户认证系统。
user = auth.authenticate(username=username, password=password)
作用是验证提供的用户名、密码是否有效。
auth.login(request, user)
作用是登录到会话中。
差不多前面就已经创建好了微博项目,后面的是对项目做出注意事项。
- 个人博客的简单搭建
- 个人博客的搭建
- 个人博客的搭建
- python Django 搭建简单的个人博客网站(一)
- python Django 搭建简单的个人博客网站(二)
- python Django搭建简单的个人博客网站(三)
- 搭建个人博客的方法
- 个人博客的快速搭建
- Jekyll搭建个人博客 韩俊强的博客
- github+hexo搭建个人博客(1.简单搭建)
- 搭建属于自己的个人博客
- 个人博客网站的详细搭建过程
- 如何搭建自己的个人博客网站
- 我的个人博客搭建记录
- 基于腾讯云个人博客的搭建
- Linux+WordPress搭建自己的个人博客
- github + Hexo 搭建你的个人博客
- 利用git搭建自己的个人博客
- Java 多线程 学习笔记
- maya(学习笔记)之Arnold节点
- 《弃子长安》第十六章 道阳心经
- 将矩阵a转置后存放到矩阵b当中
- openstack给keystone同步数据库出错WARNING oslo_db.sqlalchemy.engines [-] SQL connection failed. 8 attempts le
- 个人博客的简单搭建
- java爬网络图片
- itorch的安装
- 蓝桥杯 基础练习 01字串
- AttributeCollection类与Attributes.Add方法的使用[转载]
- 12月4日 数据结构 周一
- (三十)Struts2的声明式异常处理
- 欢迎您在新浪博客安家
- 女生出门旅游攻略