设为首页 加入收藏

TOP

开发一个博客园系统(一)
2017-12-24 06:07:03 】 浏览:1271
Tags:开发 一个 博客 系统

  最近在学django框架,准备用django写一个博客园的系统,并且在写的过程中也遇到一些问题,实践出真知,对django开发web应用方面也有了进一步的了解。很多操作实现都是以我所认知的技术完成的,可能存在不合理的地方(毕竟实现的方法多种多样),基本完成后会将源码上传到git,也欢迎各位大神指正。

  首先,要写未登录主站(index)。这里需要注意文章的分类:

  文章的分类切换,网站本身有定义的文章类型:

   type_choices = [
        (1, "Python"),
        (2, "Linux"),
        (3, "OpenStack"),
        (4, "GoLang"),
    ]

  要实现主页的分类(分类标签样式要突出)需要使用一个前端与后端都有的id来显示分类。

    if request.method=='GET':
        type_id = int(kwargs.get('type_id')) if kwargs.get('type_id') else None
        #后台都是get传参
        if type_id:
            article_list = models.Article.objects.filter(article_type_id=type_id).extra(select={'c': "strftime('%%Y-%%m',create_time)"})
        else:
            article_list = models.Article.objects.all().extra(select={'c': "strftime('%%Y-%%m',create_time)"})
        type_choice_list = models.Article.type_choices#分类的
        # print(type_choice_list)#[(1, 'Python'), (2, 'Linux'), (3, 'OpenStack'), (4, 'GoLang')]
后台代码
{% if type_id %}
                        <li><a href="/">全部</a></li>
                    {% else %}
                        <li class="active"><a href="/">全部</a></li>
                    {% endif %}

                    {% for item in type_choice_list %}
                        {% if item.0 == type_id %}
                            <li class="active"><a href="/all/{{ item.0 }}/">{{ item.1 }}</a></li>
                        {% else %}
                            <li><a href="/all/{{ item.0 }}/">{{ item.1 }}</a></li>
                        {% endif %}
                    {% endfor %}
前端代码

  登陆与注册页面

  登陆与注册的验证使用form表单功能完成,除此之外我们还需要有一个图片验证码用于认证。

   在前端设置一个图片,图片src属性指向后端(获取图片时向后端发生get请求方式,后端返回的),验证码图片由后端生成图片在上面显示,点击更换我们使用每次点击在src属性后面加一个?,这样url改变了前端向后台发送一个get请求,那么就会获得一个新的验证码图片了。

 <img style="width: 120px;height: 30px;" src="/check_code/" title="点击更换" id="change_img">

        $(function(){
            change_img();
        });
        function change_img() {//get方式在url上加?刷新图片
            $('#change_img').click(function () {
                $(this)[0].src=$(this)[0].src+'?';
            })
        }
前端代码
from PIL import Image,ImageDraw,ImageFont,ImageFilter
import random

def rd_check_code(width=120, height=30, char_length=4, font_file='kumo.ttf', font_size=28):
    code = []
    img = Image.new(mode='RGB', size=(width, height), color=(255, 255, 255))
    draw = ImageDraw.Draw(img, mode='RGB')
 
    def rndChar():
        """
        生成随机字母   
        :return:
        """
        return chr(random.randint(65, 90))
 
    def rndColor():
        """
        生成随机颜色
        :return:
        """
        return (random.randint(0, 255), random.randint(10, 255), random.randint(64, 255))
 
    # 写文字
    font = ImageFont.truetype(font_file, font_size)
    for i in range(char_length):
        char = rndChar()
        code.append(char)
        h = random.randint(0, 4)
        draw.text([i * width / char_length, h], char, font=font, fill=rndColor())
 
    # 写干扰点
    for i in range(40):
        draw.point([random.randint(0, width), random.randint(0, height)], fill=rndColor())
 
    # 写干扰圆圈
    for i in range(40):
        draw.point([random.randint(0, width), random.randint(0, height)], fill=rndColor())
        x = random.randint(0, width)
        y = random.randint(0, height)
        draw.arc((x, y, x + 4, y + 4), 0, 90, fill=rndColor())
 
    # 画干扰线
    for i in range(5):
        x1 = random.randint(0, width)
        y1 = random.randint(0, height)
        x2 = random.randint(0, width)
        y2 = random.randint(0, height)
 
        draw.line((x1, y1, x2, y2), fill=rndColor())
 
    im
首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇数据分析R&Python-Rpy2包环境配置 下一篇python3 爬虫---爬取糗事百科

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目