当前位置:   article > 正文

python django web 开源项目,python项目开发案例集锦

python django web 开源项目

大家好,本文将围绕python项目开发案例集锦源码展开说明,python项目开发案例集锦 pdf是一个很多人都想弄明白的事情,想搞清楚python django web 开源项目需要先了解以下几个事情。

p个大s:
  1. 这里用的是python3.7和Django2.0.假设全都安装成功= =
  2. 然后这个是我做个人网站的一个过程==
  3. 然后这个也不能算是个教程吧=python的基本知识点总结。=
  4. 然后这只是粗糙的记录==
  5. 最后,防脱发用霸王=3=
生成一个完整的django项目
  • 创建Django项目

    django-admin.py startproject MySite

    此时,你会看到这样的文件夹:

    image_1cjvd08ra1bil15seqb71p312or9.png-6.5kB

  • 运行一下你的项目,看看有没有成功

    ./manage.py runserver

    终端会显示这些:
     

    image_1cjvd8tjj4aq48ihk21n4d1b38m.png-79kB


    有红字也不要担心,因为还没有设置呢!
    接下来去http://127.0.0.1:8000/看一看:
     

    image_1cjvdb63b1bcl1jnpupct2610j423.png-121.7kB


    成功了!
    ps:如果想要外部机器(同一网络)访问本机的Django服务的话,要写成./manage.py runserver 0.0.0.0:9999,并将setting.py中的ALLOWED_HOSTS改为ALLOWED_HOSTS = ['*', ],一定要加逗号

  • 改一些配置
    ps:这里的顺序可能不对。= =

    1. 更改/MySite/MySite/settings.py中的内容
      Django默认的DATABASESsqlite,是这样的:
       

      image_1cjvdpm002a81skaf2714pr1f2t2g.png-13.3kB


      这里我是用的是MySQL数据库,因此,我要改成这样:

      1. DATABASES = {
      2. 'default': {
      3. 'ENGINE': 'django.db.backends.mysql',
      4. 'NAME': 'MySite',
      5. 'USER': 'xxx',
      6. 'PASSWORD': 'xxxxx',
      7. 'HOST': '127.0.0.1',
      8. 'PORT': '3306'
      9. }
      10. }

      这里一定要确保数据库已经存在了。在这之前,需要创建数据库,像这样滴:

      create database MySite CHARACTER SET utf8 COLLATE utf8_general_ci;

      还要更改时区语言

      image_1cjveevfspif39o6hm2mnucn3d.png-5.8kB

    2. /MySite/MySite/__init__.py中添加内容

      1. import pymysql
      2. pymysql.install_as_MySQLdb()
  • 数据库迁移
    首先,执行

    ./manage.py makemigrations

    然后,执行

    ./manage.py migrate

    这样就成功啦~

    image_1cjvfbgkulc0gvt1gl9cu01sgd4a.png-70.9kB

  • 创建超级用户
    创建超级用户是用来登陆到admin后台管理中的
    执行

    ./manage.py createsuperuser

    然后按照提示填写就好啦~
    ps:一定要先进行数据库迁移,再创建用户。否则,会出现

    image_1cjvfv00s1kuo119k1t8dh581ug84n.png-6.3kB

  • 进入admin看看
    在浏览器中输入http://127.0.0.1:8000/admin,会出现登录页面,此时会发现全都变成中文了,说明之前的设置生效了。
     

    image_1cjvg4n791bobtht1smbf1f1u7t54.png-41.6kB


    接下来,就可以用刚刚创建的用户登陆了,查看后台数据了!

项目正式开始
  • 创建app
    执行./manage.py startapp Post,查看项目结构,如下:

    image_1cjvibkvpei29mk1doucvv12j15h.png-10kB

    完成上步操作后,需要在/MySite/MySite/settings.py中将app添加进去:
     

    image_1cjvifci91ss01v9l1l1g1m5moo25u.png-14.5kB


    接下来,需要在app文件夹下添加urls.py,用于路由映射:
     

    image_1cjvilv4o14lf9a9371jkjhcr7o.png-9.4kB


    urls.py中这样写:

    1. app_name = 'Post' # 这里是为了url反向解析用
    2. urlpatterns = [
    3. # 这里放映射的view
    4. ]

    同时,在/MySite/MySite/urls.py中需要添加对Post.urls的映射:

    1. from django.contrib import admin
    2. from django.urls import path, include
    3. urlpatterns = [
    4. path('admin/', admin.site.urls),
    5. path(r'', include('Post.urls')),
    6. ]
  • 创建模型
    在app下的models.py创建自己的模型就可以啦~

    1. from django.db import models
    2. class Category(models.Model):
    3. """分类"""
    4. name = models.CharField(max_length=100)
    5. class Tag(models.Model):
    6. """标签"""
    7. name = models.CharField(max_length=100)
    8. class Post(models.Model):
    9. """文章"""
    10. title = models.CharField(max_length=100)
    11. body = models.TextField()
    12. created_time = models.DateTimeField()
    13. modified_time = models.DateTimeField()
    14. excerpt = models.CharField(max_length=200, blank=True) # 文章摘要,可为空
    15. category = models.ForeignKey(Category, on_delete=True) # ForeignKey表示1对多(多个post对应1个category)
    16. tags = models.ManyToManyField(Tag, blank=True)
    17. views = models.PositiveIntegerField(default=0) # 阅读量

    然后一定不要忘记再进行数据库迁移啊!!

  • 前端模版
    这里的前端模板使用的是模板之家的
    链接��:http://www.cssmoban.com/tags.asp?n=html5

    首先创建templates目录,结构如下:
     

    image_1cjvlp6q840k17eg1cubd8i1qpi8i.png-12.8kB


    此时,需要在setting.py中添加关于模板的配置:

    image_1cjvls24ohf91gngccsuk5ce8v.png-39.8kB

    接下来是static目录,结构如下:
     

    image_1cjvlvc96ir9hk4ubn1jk73uq9c.png-9.5kB


    显而易见,这里放的是一些css、js文件等

  • index视图
    首先,在Post/views.py中实现index方法:

    1. def index(request):
    2. """
    3. 主页
    4. :param request:
    5. :return:
    6. """
    7. return render(request=request, template_name='Post/index.html')

    request为请求对象;
    template_name为渲染的前端页面的路径字符串(相对templates目录)

    然后,在Post/urls.py中进行路由映射:

    1. urlpatterns = [
    2. url(r'^$', views.index, name="index"),
    3. ]

    注意:如果你主页的url是空,正则必须写成^$

    最后,一定要要修改静态页面中引用的路径。
    对于Django来说,可以使用static标签。
    在页面开头引入{% load static %},这个对应的配置信息是

    image_1ck6k15rg1j1lfei3j1aoepvha9.png-2.7kB


    并将页面中的路径改为

    image_1ck6k35as1gm97pr1gng1ch41ns7am.png-4.5kB


    ps:对于css或者js中的引用也不要忘了改!

    运行一下。
     

    image_1ck6k74sv5p3212h1osclqub3.png-422.3kB


    搞定!

  • 向前端渲染及分页
    首先,更改index()

    1. from django.shortcuts import render
    2. from django.core.paginator import Paginator
    3. from .models import Post
    4. def index(request):
    5. """
    6. 主页
    7. :param request:
    8. :return:
    9. """
    10. post = Post.objects.all()
    11. limit = 3
    12. paginator = Paginator(post, limit)
    13. page = request.GET.get('page', 1)
    14. result = paginator.page(page)
    15. context = {
    16. "post_list": result,
    17. "page": page
    18. }
    19. return render(request=request, template_name='Post/index.html', context=context)

    然后修改index.html

    image_1ck6ueleqhgg1ml215qg8461hpkbg.png-122kB

    运行看一下
     

    image_1ck6uhi34mt1nqi1a3i46p204bt.png-173.5kB


    搞定!

  • 更改index.html中的所有跳转链接
    在这里,我用的是url的反向解析。这样可以减轻后期维护成本。因此,就需要在urls.py中添加如下信息:

    image_1ck6vajq31hn72jkr4hjpe1dt1ca.png-11.1kB

    image_1ck6vb9cieha182n1eg12rt7qfcn.png-7.8kB


    在html中修改成如下:

    image_1ck6vcgaqlpe8dqsf8qnn17rndk.png-3.5kB

  • 博客文章页面
    别忘了改跳转链接!!!!
    文章详情页和主页大体结构是相似的,因此,这里使用了模版继承。
    在基类模版里,使用这个,将子类模版需要填充的位置占位
     

    image_1ck99cgjpsqtjq41hnk148j1ak9.png-4.6kB


    然后在子类模板中,使用相同的标签将填充的内容进行包裹
    最后,不要忘了在子类模板中再写上{% extends 'Post/base.html' %}{% load static %}

    Post/urls.py中添加详情页的url:

    url(r'^detail/post-(?P<pk>\d+)$', views.detail, name="detail"),

    并添加detail视图

    1. def detail(request, pk):
    2. """
    3. :param request:
    4. :param pk: 接收到的文章的主键id
    5. :return:
    6. """
    7. return render(request, template_name='Post/blog.html', )

    运行看一下吧!
     

    image_1ck99kovo16t218tb11lo19k441mm.png-257kB


    搞定!
    继续在视图中添加内容,将假数据改为真实的文章数据
    对于多对多的关系来说,可以写成这样:
     

    image_1ck9hp2bkhnqamtcnbbm415813.png-10.1kB


    看一看效果吧!

    image_1ck9i8vcll104c16qd1i9r2k01g.png-264.3kB

    **接下来就是让我可以上传markdown格式的文本了!
    这个暂时先不解决了= =,小本本记下来**

  • 添加分类栏
    这里使用自定义模版标签!
    首先,在app文件夹下,创建templatetags文件夹,然后创建一个py文件,里面定义模版标签,目录是这样滴:

    image_1ckc3ee0n117f10is15k8idd402d.png-9.9kB

    然后定义一个分类目录的标签:

    1. from django import template
    2. from ..models import Category
    3. register = template.Library()
    4. @register.simple_tag
    5. def get_categories():
    6. """
    7. 分类目录标签
    8. :return:
    9. """
    10. return Category.objects.all()

    在前端引用自定义标签时,一定要开头加载自定义的模版标签所在的py文件,{% load simple_tags %},然后再使用:

    1. {% get_categories as category_list %}
    2. {% for category in category_list %}
    3. <li><a href="#">{{ category.name }}</a></li>
    4. {% endfor %}

    看一下效果吧!
     

    企业微信截图_f1e71885-52fc-43e6-b722-a51dc80c8934.png-364.8kB


    搞定!

  • 评论功能
    评论功能新建一个app

    ./manage.py startapp comment 

    不要忘了把它注册到django中

    image_1ckc6rca21j8d73ogvq16a01cl01e.png-15.2kB

    创建模型:

    1. from django.db import models
    2. class Comment(models.Model):
    3. name = models.CharField(max_length=20)
    4. email = models.EmailField(max_length=50)
    5. website = models.URLField(blank=True)
    6. text = models.TextField()
    7. created_time = models.DateTimeField(auto_now_add=True)
    8. post = models.ForeignKey('Post.Post', on_delete=True) # 一篇文章有多个评论

    不要忘了注册到admin中啊!

    admin.site.register(Comment)

    最重要的一步。数据库迁移啊!!!

    这里要实现的是点击submit按钮,会提交评论
    comment/views.py中添加视图:

    1. from django.shortcuts import render, redirect
    2. from .models import Comment
    3. from Post.models import Post
    4. from django.urls import reverse
    5. def submit_comment(request, pk):
    6. """
    7. 处理提交的评论
    8. :param request:
    9. :return:
    10. """
    11. post = request.POST
    12. comment = Comment()
    13. comment.name = post.get("name")
    14. comment.email = post.get('email')
    15. comment.website = post.get('website')
    16. comment.text = post.get('message')
    17. comment.post = Post.objects.get(id=pk)
    18. comment.save()
    19. return redirect(reverse('Post:detail', kwargs={"pk": pk}))

    更改前端页面中的评论部分:

    image_1ckcba269rui1u8a8rt1chqulf2r.png-37.9kB

    comment/urls.py中添加映射:
     

    image_1ckcc3v5apog1quqljj7lrrh21p.png-13.1kB


    试一下吧!
     

    image_1ckcc59nn17vv1dqq1lot1lak8tk26.png-24.9kB


    搞定!

    后面再完善一下。搞成可以回复的啵!小本本记下来~

  • 最新评论
    这个也写成自定义标签啵。

    1. @register.simple_tag
    2. def get_latest_comment():
    3. """
    4. 获取最新评论
    5. :return:
    6. """
    7. comment_list = Comment.objects.all()[:5].only('post', 'text') # 只获取特定字段
    8. return comment_list

    image_1ckceclnl10r41ocn18rlu2mpfc2j.png-17.4kB

    看一下效果
     

    image_1ckcef75i1ie51q421seb1rcu1lmm30.png-20.2kB


    搞定!

  • 阅读量
    Post/models.py中添加:

    image_1ckcf0alj1l1u12a450avgf14323d.png-71.1kB

    Post/views.py中添加:

    image_1ckcf1coerbg1j2lroe2l91q9b3q.png-48.6kB

    在前端页面添加:

    image_1ckcf2edjfd11i6qg8e1vq51pfo47.png-4.3kB

    搞定!

    image_1ckcf3k481u62unqtur1iis10ne5k.png-7.5kB

好啦~到这里博客基本成型了。就是不好看= =。然后后面继续完善。小本本记下来。

文章知识点与官方知识档案匹配,可进一步学习相关知识
Python入门技能树Web应用开发 Django425809 人正在系统学习中
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/723110
推荐阅读
相关标签
  

闽ICP备14008679号