博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django页面循环_Python 之 Django 的入门(下)
阅读量:5482 次
发布时间:2019-06-16

本文共 7053 字,大约阅读时间需要 23 分钟。

前文:从上期的推文中,想必大家学习到了 Django 中一些常规的操作,接下来我们继续介绍 Django 的内容

一、简介

Django 作为一个 Python 的高级 Web 框架,功能非常强大,其自身封装了大量底层逻辑,并实现了 ORM,同时,MVT 结构保证了代码结构的完整性,这一切给了开发人员巨大的便利,让 Web 开发变得高效且简洁。课程将以一个极简的博客网站为例,带领大家充分领略 Django 的魅力。

二、本课程能学到什么?

  1. 搭建完整的 Django 开发环境。

  2. 创建项目及应用。

  3. 了解项目目录下各文件的含义和作用。

  4. 了解并学会开发 Templates。

  5. 了解并学会开发 Models。

  6. 掌握 Admin 的基本配置方法。

  7. 学会项目 URL 的配置方法。

三、开始学习吧

3.5 Admin

Admin 是 Django 自带的一个功能强大的自动化数据管理界面,被授权的用户直接在 Admin 中管理数据库。Django 提供了许多针对 Admin 的定制功能。

打开命令行,输入: python manage.py createsuperyser 创建超级用户,创建名字和密码即可。(密码最好是字母加数字两种以上的字符,否则太简单会创建失败)

dfab43833cc6f9770f5da4a140da922f.png

Admin 的入口是:localhost:8000/admin/

在应用下的 admin.py 中引入自身的 models 模块。

from django.contrib import adminfrom blog import modelsclass ArticleAdmin(admin.ModelAdmin):    list_display = ("title","content","pub_time")    list_filter = ("pub_time",)admin.site.register(models.Article)

进入 Admin 的登录页面,输入刚刚创建的名字和密码。

b797f71c84907f297ecce68147439c4f.png

Django 管理页面如下:可对博客进行增加修改。

4301493d42f5ed0cb811769d8b064061.png

点击 article 进入编辑页面,可以看到在 models.py 中写的title、content、pub time。

f61a25745b55e5baf4deb5601ef055eb.png

还能添加博客,标题内容时间编辑。

8b2d32425e7b058dc2681d2e4b85f5d7.png

3.6 博客主页面开发

      首先明确博客页面需要什么?

  1. 博客主页面

  2. 博客文章内容页面

  3. 博客撰写页面

3.6.1博客主页面

      在主页面中我们需要什么呢?

  1. 文章标题列表(超链接)

  2. 发表博客按钮(超链接)

首先取出数据库中所有文章对象,其次将文章对象们打包成列表,传递到前端。然后前端页面把文章以标题超链接的形式逐个列出。重点在于怎么循环文章列表。

for 循环语句:

{% for xx in xxs %}

中间内容 

{% endfor %}

打开 views.py 更改 index 函数 get 改为 all,就能拿到所有的文章标题。

from django.shortcuts import renderfrom django.http import HttpResponsefrom . import modelsdef index(request):articles = models.Article.objects.all()return render (request,'index.html',{'articles':articles})打开 index.html 更改    
head>

++添加新文章++a>h1>{% for article in articles %}{
{ article.title }}a>
{% endfor %}body>html>

打开命令行,进入项目中,输入: python manage.py runsever 可运行项目。

3.6.2 博客文章内容页面

这个页面内容有三点:

  1. 文章标题 

  2. 文章内容 

  3. 修改文章按钮(超链接)

创建新的 article_page.html 文件。

    
Article Pagetitle>head>

{
{ article.title }}h1>

{
{ article.content }}

修改文章a>body>html>

打开 views.py 创建 article_page 函数,除了 reques 参数,还要添加一个 article_id 的参数作为文章标题。函数要获取通过主页面点击的文章,通过文章标题来分辨需要获取哪篇,然后返回 html 页面。

def article_page(request,article_id):    article = models.Article.objects.get(pk = article_id)    return render(request, 'article_page.html',{
'article': article})

打开应用下的urls.py添加url。(?P[0-9]+)把正则表达式匹配到的数字,以article_id为组名匹配。

from django.conf.urls import urlfrom . import viewsurlpatterns = [    url(r'^index/$',views.index),url(r'^article/(?P[0-9]+)$',views.article_page),]

那么在 Django 页面如何写超链接呢?

{% url 'app_name:url_name' 地址参数 %}

其中app_name和url_name在url中配置的

url的名称参数:

60288c2588ecb07eab3741352eb72376.png

先打开 myblog 目录下的 urls.py,在后面添加 namespace。

url(r'^blog/',include('blog.urls',namespace='blog')),

然后打开应用目录下的 urls.py ,添加 name 。

from django.conf.urls import urlfrom . import viewsurlpatterns = [    url(r'^index/$',views.index),url(r'^article/(?P[0-9]+)$',views.article_page,name='article_page'),]

打开 index.html 添加 url

    
head>

++添加新文章++a>h1> {% for article in articles %} {
{ article.title }} a>
{% endfor %}body> html>

运行页面后点击文章标题可以看到文章内容。

3.6.3 博客撰写页面

这个页面的主要内容有:

  1. 标题编辑栏

  2. 文章内容编辑区域

  3. 提交按钮

首先创建一个新的 edit_page.html 文件

    
Edit Pagetitle>head>
{% csrf_token %} #安全防范

切换 views.py 添加 edit_page 函数和 edit_action 函数

def edit_page(request,article_id):    if str(article_id) ==  '0':        return render(request,'edit_page.html')    article = models.Article.objects.get(pk = article_id)    return render(request, 'edit_page.html',{
'article': article}) def edit_action(request): title = request.POST.get('title','TITLE') content = request.POST.get('content','CONTENT') article_id = request.POST.get('article_id','0') if article_id == '0': #如果article_id为0 models.Article.objects.create(title=title, content=content) articles = models.Article.objects.all() return render(request, 'index.html',{
'articles':articles}) article = models.Article.objects.get(pk = article_id) article.title = title article.content = content article.save() #修改数据后保存 return render(request, 'article_page.html',{
'article':article})
e4e610a24475a93b3a7429cb5c8ecc5e.png

切换到应用目录下 urls.py,添加 url

url(r'^edit/(?P[0-9]+)$',views.edit_page,name='edit_page'),url(r'^edit/action$',views.edit_action,name='edit_action'),

edit_page 函数注意事项:添加编辑文章的按钮思路与添加文章类似,但是新文章为空,修改文章有内容。修改页面有文章有对象,所以我们用已创建的文章 ID 来添加按钮。

简易的博客就这样做好啦,自行设计前端让博客变得好看吧!在这里给出全部代码进行参考。

根目录下的 urls.py

from django.contrib import adminfrom django.conf.urls import url,includefrom blog import viewsurlpatterns = [    url(r'^$',views.home),    url(r'^admin/', admin.site.urls),    url(r'^blog/',include('blog.urls',namespace='blog')),]

应用目录下 admin.py

from django.contrib import adminfrom blog import modelsclass ArticleAdmin(admin.ModelAdmin):    list_display = ("title","content","pub_time")    list_filter = ("pub_time",)admin.site.register(models.Article,ArticleAdmin)

应用目录下 models.py

from django.db import modelsimport django.utils.timezone as timezoneclass Article(models.Model):    title = models.CharField(max_length=200,unique = True)    content = models.TextField(max_length=2000)    pub_time = models.DateTimeField(default = timezone.now)    def __str__(self):       return self.title

应用目录下 urls.py

from django.conf.urls import urlfrom . import viewsapp_name ='blog'urlpatterns = [    url(r'^index/$',views.index,name='blog'),    url(r'^article/(?P[0-9]+)$',views.article_page,name='article_page'),    url(r'^edit/(?P[0-9]+)$',views.edit_page,name='edit_page'),    url(r'^edit/action$',views.edit_action,name='edit_action'),  ]

应用目录下 views.py

def index(request):    articles = models.Article.objects.all()    comments = models.Comment.objects.all()    return render(request,'index.html',locals())def home(request):    return render(request,'home.html')def article_page(request,article_id):    article = models.Article.objects.get(pk = article_id)    return render(request, 'article_page.html',{
'article': article})def edit_page(request,article_id): if str(article_id) == '0': return render(request,'edit_page.html') article = models.Article.objects.get(pk = article_id) return render(request, 'edit_page.html',{
'article': article})def edit_action(request): title = request.POST.get('title','TITLE') content = request.POST.get('content','CONTENT') article_id = request.POST.get('article_id','0') if article_id == '0': models.Article.objects.create(title=title, content=content) articles = models.Article.objects.all() return render(request, 'index.html',{
'articles':articles}) article = models.Article.objects.get(pk = article_id) article.title = title article.content = content article.save() return render(request, 'article_page.html',{
'article': article})

index.html

    
Diarytitle>head>+添加新文章+a>
{% for article in articles %}
{
{ article.title }}a>
{% endfor %}body>html>

article_page.html

    
文章title>head>

{
{ article.title }}h1>

{
{ article.content }}h1>
修改文章a> 返回主页a>body>html>

edit_page.html

    
新文章title>head>
{% csrf_token %}

转载地址:http://gezct.baihongyu.com/

你可能感兴趣的文章
开发常用动画收集
查看>>
nginx js、css多个请求合并为一个请求(concat模块)
查看>>
mybatis实战教程(mybatis in action)之五:与spring3集成
查看>>
解决浏览器Adobe Flash Player不是最新版本问题
查看>>
SQLite 约束
查看>>
Python爬虫学习——使用Cookie登录新浪微博
查看>>
linux配置网络
查看>>
vsftp 500 OOPS: cannot change directory:/home/xyp
查看>>
MVC ---- EF的安装于卸载
查看>>
WebRTC 学习之 概念总结
查看>>
Java对ad操作
查看>>
unity与android交互总结
查看>>
h5 微场景
查看>>
linux下uboot kernel操作cpu寄存器
查看>>
(转)PaperWeekly 第二十二期---Image Caption任务综述
查看>>
raspi-config Expand root partition to fill SD card 原理
查看>>
maven generating project in batch mode hang
查看>>
Excel与XML相互转换 - C# 简单实现方案
查看>>
远程通信的几种选择(RPC,Webservice,RMI,JMS的区别)
查看>>
基础二:javascript面向对象、创建对象、原型和继承总结(下)
查看>>