精华内容
下载资源
问答
  • 对于在django开发项目,在一些位置的理解和易错 每个views.py将会对应一个html,每个models.py中,每个类对应一个数据库,此时在models.py中创建相关数据模型。 —————————更改项目中settings.py文件——...

    Django--------3.0.4
    对于在django中开发项目,在一些位置的理解和易错
    每个views.py将会对应一个html,每个models.py中,每个类对应一个数据库,此时在models.py中创建相关数据模型。
    —————————更改项目中settings.py文件—————————
    在settings.py中

    INSTALLED_APPS=(
    #添加创建的app
    )
    

    ————————更改项目中settings.py文件结束————————
    ————————————修改数据库—————————————
    创建数据库:

    python manage.py migrate
    

    常用数据类型:

    #在模型中类需要传参为models.Model,字段类型一些字母需要大写
    text=models.CharField(max_length=)#此数据是由字符或文本组成的字段
    date=models.DateTimeField(auto_now_add=True)#此数据为记录时间的字段。
    number=models.IntegerField()#为记录数字的字段
    user=models.ForeignKey(User,on_delete=models.CASCADE)
    #由于版本不同,Foreignkey(),需要传递两个参数。第一个参数为关联外键的名
    

    在models.py中,每个类如果需要返回数据,则在此类中定义函数__str__()函数,return 返回数据
    此时,修改数据库,(数据库的迁移,使django可以修改数据库,储存相关数据)
    python manage.py makemigrations appname。

    python manage.py makemigrations appname
    #appname是你所要为app创建数据库的app名称
    

    查看数据库迁移是否正常工作:python manage.py migrate

    python manage.py  migrate
    #查看迁移数据库之后,是否能正常工作
    

    ——————————数据库修改完成—————————————
    —————————————修改url——————————————
    此时在项目中修改urls.py,需要注意的是,新老版本的django不同,include传参不同path(‘表达式’,include(‘appname.urls’,‘appname’),namespace=‘appname’)

    urlpatterns=[
    path('表达式',include('appname.urls','appname'),namespace='appname')]
    

    此时,在app内urls.py文件中写入url。用于调用网页

    from django.conf.urls import url
    form . import views#此时引用当前目录下的views.py,用于渲染页面
    urlpatterns=[
    url('正则表达式',views.color,name='htmlname'),]
    

    此时在使用此app时,若符合正则表达式,则会调用此页面,使用views.py渲染页面后,输出
    ————————————urls配置完毕————————————
    ———————————配置视图views.py———————————

    #定义视图
    #在视图中使用数据渲染页面时,需要引入数据库
    from .models import topic#topic为数据库名称
    def color(request)#color与app中urls.py中url的views.color相同
    	return render(request,'appname/htmlname')#将渲染的页面传输到html中
    	#此时,为最简单的页面,直接返回原页面
    	#如果在某种条件下跳转页面reuturn HttpResponseRedirect(reverse('appname:html'))#返回页面名
    #如果在渲染页面中,需要给页面传递数据,在render(request,'appname/htmlname',{'htmlcontextname':this contextname})
    #此时,将会给页面传递数据
    
    

    ————————————配置视图完毕————————————
    ————————————html接收数据、继承—————————
    继承html分为被继承,和继承,需要在被继承页面中插入块标签
    在被继承的html中
    {% block content %}{% endblock content %},是一个占位符,包含的信息将由子模版指定。
    在继承的html中
    头文件{% extends appname/htmlname %},指出被继承的页面,需要注意的是,在一个项目下,不同app之间也可以继承页面。
    {% block content %}{% endblock content %},content需要和被继承的占位符名称相同。
    ———————————在数据库中关联外键——————————
    如果迁移数据库之后发现需要再次关联外键,首先更改models.py加入外键。重新迁移数据库,此时系统会检测到之前的数据没有关联到刚刚添加的外键,会给出两个选项,第一个选项为现在提供默认值,第二,现在推出,在models.py中添加默认值。如果选择第一个选项,则会让我们输入所要关联外键的id值。
    ————————————关联外键完毕————————————
    ————————根据现有数据模型创建表单——————————

    from django import forms
    from .models import Topic,Entry#Topic,Entry为数据库名称
    class Entrycform(forms.ModelForm):
    	class Meta:#告诉Django使用哪个类来创建表格
    		model=Entry#根据Entry数据Entry创建表格
    		fields=['text']#告诉Django数据包含哪些字段
    

    ————————————创建表单完成————————————
    —————————————更改视图—————————————
    在要填写内容的位置增加

    from .forms import Entryform
    form=Entryform()#建立表格对象
    form=Entryform(data=request.POST)#使post的数据填充表格
    if form.is_valid():#判断上传数据是否合法
    	new=form.save(commit=False)#将上传的数据暂时保存,由于上传的数据暂未完整,需要填充外键,此外键不能用户填写
    	new.topic=topic#将此数据增加外键后,再保存到数据库
    	new.save()
    在渲染页面时,应该将form返回到html中
    return render(request'appname/htmlname',{'form':form})
    #此时,将页面中的列表返回到html页面中
    

    ———————————更改视图完成—————————————
    ————————————跳转网页——————————————
    传递数据之后需要自动跳转网页:

    return HttpRespnseRedirect(reverse('appname:htmlname',args=[]))
    #有时跳转到的网页需要传递一些参数,跳转到指定数据的网页,使用args=[]传递参数
    

    ————————————跳转网页完成————————————
    ————————————html中提交页面———————————
    在html页面中使用为防止对服务器未经授权的访问,在提交表单等内容时,在中写入
    {% csrf_token %}
    再将渲染页面的表格输出
    {{ form.as_p }}
    此时是,在页面中可以输入数据,并提交
    ——————————html中提交页面完成———————————
    ——————————添加数据输出数据条件——————————
    使用装饰器:
    在views.py中引入装饰器模块

    from django.contrib.auth.decorators
    #在需要数据私有化的视图函数之前加
    @login_required
    

    在settings.py中末尾位置添加我的设置:

    LOGIN_URL='/appname/login/'
    #测试这个设置,如果未登录用户,点击需要需要登录才能查看的数据,会自动跳转到此链接
    

    ———————————数据输出条件结束———————————
    ————————————url书写格式—————————————
    在views.py中返回渲染的网页时:

    return render(request,'appname/htmlname')
    

    在继承网页时:
    {% extends ‘appname/htmlname’ %}
    在重定向页面时:

    return HttpResponseRedirect(reverse('appname:htmlname'))
    

    在a标签中:
    href="{% url ‘appname:htmlname’ %}"
    ———————————url书写格式结束————————————
    以上为个人学习总结,如有错误,敬请指正
    邮箱xiang20010326@sina.com

    展开全文
  • Django项目开发实战

    2021-06-30 01:14:01
     《Django项目开发实战》从构建一个Django开发项目到部署应用实践,由浅入深,引领学员逐步掌握各项技能  课程内容涵盖  Django项目环境和模型准备  Django主页和后台实现  Blog项目详情页实现  页面优化  ...
  • Django项目开发基础

    千次阅读 2019-07-30 16:00:07
    Django项目开发基础 新建Django项目 django-admin startproject 项目名称     #创建django项目 运行Django项目 python manage.py runserver          &...

    Django项目开发基础

    新建Django项目

    django-admin startproject 项目名称     #创建django项目

    运行Django项目

    python manage.py runserver                 #运行Django

    新建django-app

    python manage.py startapp blog           #创建blog文件夹,保存blog-app项目

    生成迁移文件

    python manage.py makemigrations       #在当前app下创建一个迁移文件,在makemigrations下

    运行迁移文件

    python manage.py migrate                     #运行当前迁移文件,将相关的设置同步到数据库中

    反向生成数据库文件

    python manage.py inspectdb                    #由数据库中的信息,反向生成数据库代码

    运行Django-shell

    python manage.py shell                          #进入django-shell界面,可以新建文章等

    比如新建一篇文章:

    1.我在源码中已经定义好文章数据库的相关信息 (可在项目的models.py中自行设置) models.py设置
    2.生成迁移文件
    3.运行迁移文件,此时数据库已经同步
    4.打开django-shell,运行命令,进入shell
    django-shell
    这个就是通过django-shell创建文章并打印出文章

    Django admin

    python manage.py createsuperuser     #创建管理员用户,输入用户名,邮箱以及密码
    运行Django项目,键入admin,使用创建的用户名密码进行登录

    同步在Django-shell中的文章

    对新的django_app文件下的admin.py进行编译
    同步文章

    在文章页面只显示文章的title

    在Django_app文件夹下的models.py文件下添加函数
     def str(self):
            return self.title         #在文章页显示文章的title

    Django环境的搭建与启动配置教程

    展开全文
  • django开发web小项目

    万次阅读 2015-12-22 14:19:46
    django开发web小项目引言近期使用django开发了个小web项目,使用了bootstrap模板样式,以及echart图形控件,在这里对它们的基本使用做一些小总结.Whydjango是由python开发的开源网站框架,可以快速的搭建高性能的web站点...

    django开发web小项目

    引言

    近期使用django开发了个小web项目,使用了bootstrap模板样式,以及echart图形控件,在这里对它们的基本使用做一些小总结.

    Why

    django是由python开发的开源网站框架,可以快速的搭建高性能的web站点,个人觉得特别合适于公司级的小项目,Cloudera的hue就是基于django开发的.
    bootstrap具有强大的模板样式,拿来即用,界面简洁,使用方便.
    echart百度开源的良心产品,图形界面全面,且清爽,炫酷,官方帮助文档详细.

    版本

    以我当前前的开发环境为例:
    - django 1.8.3
    - bootstrap 3.3.5
    - python 2.7.3
    注意:django对于版本要求比较高,可能不同版本的django不兼容,尽量保证相同的项目都使用开发时的版本,不然可能出现”意外”的问题;另外bootstrap不同版本样式也不太一样.

    How

    django

    安装

    建议使用pip安装或者apt-get安装,源码包install安装后,若要卸载麻烦,直接删除python包的django路径可能不干净,源码包安装也是挺不错的.

    sudo apt-get install python-pip
    sudo pip install Django==1.8.3

    注意:有些系统默认是低版本的python例如1.6.X,当升级到1.7.X后,pip不好用,同样需要升级pip.

    常用的命令

    1. 新建项目
      python /usr/local/bin/django-admin.py/django-admin.py startproject project-name
    2. 新建app
      python manage.py startapp app-name
    3. 同步数据库
      python manage.py syncdb
      注意:在models.py新增了类时,会自动在数据库中创建相应的表
    4. 启动开发服务器
    python manage.py runserver
    #指定端口
    python manage.py runserver 8001

    注意:一般发布django工程,需要借助apache或者ngnix,个人觉得内部使用,且访问量并发量小,runserver方式启动和使用完全够用,用起来也挺稳定
    5. 创建超级管理员
    python manage.py createsuperuser
    注意:django自带用户管理和权限管理,创建的用户可以在login模块中直接使用.
    6. 登陆配置好的数据库
    python manage.py dbshell

    常用的几个文件

    1. urls.py
      网址的入口,关联到相同目录下views.py的对应方法,不同版本的urls.py貌似有些区别,使用时参见对应的官方文档.
    2. views.py
      处理urls.py对应的请求,然后渲染templates的页面.
    3. models.py
      于数据库相关,一般此文件中的类会与数据库表一一对应(models.Model).上边提到过同步数据库,同时views.py的方法中一般调用models.py来操作数据库,无非就是增删改查.
    4. settings.py
      django的配置文件,一个工程只有一个,配置app,静态文件的位置,session设置,日志设置等等.

    目录结构

    project-name
        project-name
            urls.py
            views.py
            models.py
            settings.py
            ......
        app1
            templates
                htmls
            urls.py
            views.py
            models.py
            ......
        app2
        ......
        templates
            htmls
            js
        static
            ......

    登陆

    网上有很多资料,不多赘述,注意几点.
    1. 返回login.html的views.py方法
    例如
    return render_to_response('login.html',context_instance=RequestContext(request))
    直接返回return render_to_response(‘login.html’) csrf支持会有问题,必须返回原有的request信息.
    2. session控制

    SESSION_COOKIE_AGE = 60*5#5分钟超时
    SESSION_EXPIRE_AT_BROWSER_CLOSE = True#关闭浏览器超时
    1. 登陆方法
      form提交的views.py方法不能为login(request),与django模块的方法名冲突,修改成其他名称.

    bootstrap

    下载bootstrap压缩包,放在静态文件夹内,在html中引用即可.

    <script src="{% static 'bootstrap/js/bootstrap.min.js' %}"></script>
    <link href="{% static 'bootstrap/css/bootstrap.min.css' %}" rel="stylesheet">

    echart

    下载echart js包,放在静态文件夹中,在html中引用即可.
    <script src="{% static 'js/echarts/echarts.js' %}"></script>

    后台返回值

    以线性趋势图为例:
    1. legend
    图形界面上方选择的项,可要也可不要.
    2. x轴series
    一般是个list.
    3. y轴series
    一般是个dict,key为对应的legend值,value是个list,个数与x轴series按顺序一一对应.

    example

    <script type="text/javascript">
        require.config({
            paths: {
                echarts: '/static/js/echarts'
            }
        });
        // 使用
        require(
            [
                'echarts',
                'echarts/chart/line' , // 折线图
                'echarts/chart/pie'
            ],
            function (ec) {
                // 基于准备好的dom,初始化echarts图表
                var myChart = ec.init(document.getElementById('main_chart1'));
                var option = {
                    title : { text: 'Jobs Monitor', x:'center'},
                    tooltip: {
                        show: 'false'
                    },
                    color: [ '#ff7f50', '#da70d6', '#32cd32', '#6495ed', '#ff69b4', '#ba55d3', '#cd5c5c', '#ffa500', '#40e0d0'],
                    legend: {
                        x: 80,
                        y: 30,
                        data:[{% for leg in legend_list %}{% if leg %}'{{leg}}'{% endif %}{% if not forloop.last %},{% endif %}{% endfor %}]
                    },
                    xAxis : [
                        {
                            type : 'category',
                            axisLabel: {interval: 'auto', rotate:35},
                            data : [{% for day in series %}'{{day}}'{% if not forloop.last %},{% endif %}{% endfor %}]
                        }
                    ],
                    yAxis : [{
                                type : 'value',
                                axisLabel:{formatter: '{value}'}
    
                            }],
                    series : [
                            {% for key, value in out_line_dic.items %}
                              {% if key != None and value != None%}
                              {
                                "name": "{{key}}",
                                "type": "line",
                                "smooth":true,
                                "data": [{% for item_data in value %}{% if item_data %}{{item_data}}{% else %}0{% endif %}{% if not forloop.last %},{% endif %}{% endfor %}],
                                "markLine":{data:[{type:"average",name:"avg"}]},
                                itemStyle:{
                                    normal:{
                                          label:{
                                            show: true,
                                          },
                                          labelLine :{show:true}
                                        }
                                    },
                                markPoint : {
                                    data : [
                                        {type : 'max', name: '最大值'},
                                        {type : 'min', name: '最小值'}
                                    ]
                                },
                              }
                              {% if not forloop.last %},{% endif %}
                              {% endif %}
                            {% endfor %}
                        ]
                };
                // 为echarts对象加载数据
                myChart.setOption(option);
            })
    </script>

    参考资料

    自强学堂django教程
    官方django文档
    bootstrap官方文档
    bootstrap中文教程
    echarts官方文档

    展开全文
  • 请问哪位大神有Django开发天天生鲜项目的所有源码啊,遇到了问题,一时半会搞不出来了,急求
  • Django项目开发Demo

    2019-11-15 17:57:23
    Django项目开发一个小型Demo,从sqllite一步一步的简单教程,代码既有前端,也有后端代码,结构清晰易懂,稍微有一点基础的人很快就可以看懂,希望对需要的人有帮助
  • django开发个人博客系统

    万次阅读 多人点赞 2019-02-18 22:08:37
    写在开头:这是我第一次使用Django进行web开发,在此之前并无任何web开发经验。其中,Django以及html/css都属于边学边用阶段,因此项目中可能出现一些粗糙的地方,读者可以自行规避。虽然本项目名为信息资源型系统,...

    目录

    前言
    项目预览
    项目版本
    项目构思
    项目实战
         登录子系统
         后台美化
    完整项目获取
    尾言

    前言

        当初是在2018年写下的这篇文章,那时的django更新到了版本2.0,使用人数还是比较少的,网上的教程大多也很少。而现在随着python web框架的流行,越来越多人开始接触到了django这门技术。如今,django已经更新到了版本3.0,添加了支持异步等重要特性,但是这些特性和本篇文章基本无关。写下这篇文章的初衷是为了让刚接触django框架的童鞋可以入门上手一个项目,了解如何快速搭建一个项目,毕竟python web的优势便是快速易上手嘛【最近接触了springboot后的感触】。如今再次更新这篇博文(2020-2月),希望能够给予大家入门一定的帮助。
        
        
    p.s:其实建立一个web项目需要处理的事情比较杂,我就按照我的建立习惯给大家写下这篇教程。
    另外,本项目是我在重新写时完整重新搭建,所以一定可以跑通,我会写的比较仔细一点,如果你能耐心看完,必定有所收获。
    【-------------------------原创不易,请勿侵权------------------------------------------------------------------】

    项目预览

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
        
        

    项目版本

    运行平台:windows
    Python版本:3.7
    Django版本:3.0
    数据库工具:sqlite
    开发工具:Pycharm+vscode
    依赖:pillow,django-simpleui,django_summernote
        
        

    项目构思

        个人博客系统属于一个非常小型的项目,不会存在高并发的情况,同时注册用户主要也就是为了评论博客内容,其实用户账号安全性也可以完全不用考虑。项目采取前后端分离的形式进行开发,前后端信息交互多数采取ajax形式(按理说动态更新页面比较友好交互,但是为了让大家感受一下这两种方式,在登录这一块采取静态跳转)。剩下的部分一次性在这里写下来大家也不一定能看的很明白,在建立项目的过程中再给大家介绍。
        
        

    项目实战

    请先下载静态文件 下载连接:https://pan.baidu.com/s/1Er2S63MThOfzhlbuUkTEkw 之后替换相应的文件

    我们首先给我们的项目起个名字:Ericam
        
    (1)利用命令行创建项目。
        

    django-admin startproject Ericam
    

        
    (2)创建APP
        
    解释一下:项目中会存在登录子系统,博文管理子系统等,这些子系统每个都可以作为一个app,如此分离方便日后开发维护。但是作为一个入门项目,便不如此麻烦了。我们在整个项目只建立一个app。
    由于我们准备搭建的是一个博客系统,所以就给这个APP起名为:blog
        
    在命令行下继续输入

    python manage.py startapp blog
    

        
    此时文件目录结构:
    在这里插入图片描述
        
    介绍一下各个文件的用处
    在这里插入图片描述
        
    删除test.py,新建一个urls.py文件
    在这里插入图片描述
    为什么需要两个urls.py文件呢?方便分层管理,类似于一级目录,二级目录。
        
        
    (3)注册app并配置静态文件目录
    在这里插入图片描述
        
    在settings.py文件里添加如下内容
        

    # 配置静态文件目录
    STATICFILES_DIRS = [
            os.path.join(BASE_DIR, 'static'),
        ]
    

        
    【静态文件:css,js和图片文件等,我们在这里配置了文件目录路径】
    此时运行项目,用浏览器访问 http://127.0.0.1:8000/
    在这里插入图片描述
    出现一个小火箭代表我们的项目搭建成功了。
        
        
    (4)
    新建文件夹,如下所示(建议直接将static文件夹复制过来,本博客不会讲解css以及js):
    在这里插入图片描述
    (所有html文件存放于templates文件夹下)
    新建index_unlog.html文件【作为首页,未登录时显示的页面】
    我们先简单测试一下,给大家展示一下django如何通过view.py视图层显示html页面。
    在index_unlog.html里:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>首页</title>
    </head>
    <body>
        个人博客系统测试
    </body>
    </html>
    

    在views.py文件里:

    def index_unlog(request):
        return render(request,'index_unlog.html')
    

    最后我们添加一下路由地址,在与settings.py同级目录的urls.py:

    urlpatterns = [
        path('admin/', admin.site.urls),
        path('blog/',include('blog.urls')),
        path('',views.index_unlog,name='index_unlog')
    ]
    

    在新建的urls.py文件【以后我加个标号2代表该文件】里添加如下内容:

    app_name = 'blog'
    urlpatterns = [
    ]
    

    ps:在pycharm里按alt+enter可以添加未引入的类包。
    此时刷新项目,用浏览器访问 http://127.0.0.1:8000/

    在这里插入图片描述

    搞懂了每个文件的大致作用,我们便可以开始正式开发博客系统啦。
    我们按照模块化进行开发。
        
        
        

    登录子系统开发

    (1)首页(未登录)-编写index_unlog.html
        

    {% load static %}
    <html lang="zh">
      <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta name="author" content="Ericam_">
    
        <!-- CSS -->
    	<title>Ericam_blog</title>
    	<link rel="shortcut icon" href="{% static 'images/gt_favicon.png' %}">
    	<link rel="stylesheet" media="screen" href="http://fonts.googleapis.com/css?family=Open+Sans:300,400,700">
    	<link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
    	<link rel="stylesheet" href="{% static 'css/font-awesome.min.css' %}">
    	<!-- Custom styles for our template -->
    	<link rel="stylesheet" href="{% static 'css/bootstrap-theme.css'%}"  >
    	<link rel="stylesheet" href="{% static 'css/log.css'%}">
    	<link rel="stylesheet" href="{% static 'css/blog.css'%}">
    	</head>
    
    
    <body class="back">
      <!--导航栏-->
    	<div class="navbar navbar-inverse navbar-fixed-top headroom" >
    		<div class="container">
    			<div class="navbar-header">
    				<!-- Button for smallest screens -->
    				<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"><span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button>
    				<a class="navbar-brand"><img src="{%static 'css/images/lo.png'%}" alt="Progressus HTML5 template"></a>
    			</div>
    			<div class="nav navbar-nav navbar-right">
    								<!--在这里填写登录提交  1-->
    			</div>
    		</div>
    	</div>
    
    	  <center>
        <div class="container" style="padding-top:300px;min-height:800px">
          <div class="row">,.
            <p class="lead"><font color="white"">个人博客系统,尽情的享用吧(〃'▽'〃)</font></p>
            <p class="tagline"><font color="white">如果您有优秀的建议,欢迎投递哦</font></p>
    							<!--在这里填写登录提交  2-->
          </div>
        </div>
    	</center>
    
    
       <footer id="footer" class="top-space">
    		<div class="footer2">
    			<div class="container">
    				<p class="text-center">Copyright &copy; 2020, Ericam_blog</p>
    			</div>
    		</div>
      </footer>
    </body>
    </html>
    

    第一句话{%load static%}代表引入静态文件(css,js等)
    img,css,js等文件的引用与下述语句类似:

     <link rel="stylesheet" href="{%static 'css/log.css' %}">
    

    此时打开浏览器查看效果:
    在这里插入图片描述
        
        
    (2)登录页-login.html
        

    {%load static%}
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>登录</title>
        <link rel="shortcut icon" href="{% static 'images/gt_favicon.png' %}">
        <link rel="stylesheet" href="{%static 'css/log.css' %}">
        <link rel="stylesheet" href="{%static 'css/semantic.css' %}">
        <link rel="stylesheet" href="{% static 'css/font-awesome.min.css' %}">
    </head>
    <body class="login">
        <div class="ui center aligned grid" style="margin-top: 200px">
            <div class="ui six wide column">
                <h1 class="ui teal header">Ericam blog-登录</h1>
                <div class="ui segment">
                    <div class="ui content">
        <form class="ui large form" method="post" action="{%url 'login'%}">
          <div class="ui stacked segment">
            <div class="field">
              <div class="ui left icon input">
                <input type="text" name="username" placeholder="请输入用户名">
              </div>
            </div>
            <div class="field">
              <div class="ui left icon input">
                <input type="password" name="password" placeholder="请输入密码">
              </div>
            </div>
            {{ error }}<br>
            <a class="pull-right field" >忘记密码</a>
            <button class="ui fluid large teal button" type="submit">登陆</button>
          </div>
    
          <div class="ui error message"></div>
        </form>
    
        <div class="ui message">
          New to us? <a>注册</a>
        </div>
                    </div>
                </div>
            </div>
        </div>
    </body>
    </html>
    

        
    添加路由信息:
        

    urlpatterns = [
        path('admin/', admin.site.urls),
        path('blog/',include('blog.urls')),
        path('',views.index_unlog,name='index_unlog'),
        path('login',views.login,name='login')
    ]
    

        
    添加视图层views.py内容:
        

    def login(request):
        return render(request,'login.html')
    

        
    此时预览:
        
    在这里插入图片描述
        
    在index_unlog.html里添加内容:

    	<!--在这里填写登录提交  1-->
    <a class="btn" href="{% url 'login' %}">登录 / 注册</a></li>
    
        <!--在这里填写登录提交  2-->
    <p><a class="btn btn-action btn-lg" role="button" href="{% url 'login' %}">START NOW</a></p>
    

        
    为了实现登录功能,我们首先需要构造一个用户表
        
    打开models.py文件

    from django.db import models
    from django.contrib import  admin
    from django.urls import reverse
    from django.utils.timezone import now
    
    # Create your models here.
    
    class User(models.Model):
        username = models.CharField(max_length = 50)
        password = models.CharField(max_length = 200)
        nickname = models.CharField(max_length = 50,default='匿名')
        email = models.EmailField()
        created_time = models.CharField(max_length=50,default=now)
        comment_num = models.PositiveIntegerField(verbose_name='评论数', default=0)
        avatar = models.ImageField(upload_to = 'media', default="media/default.png")
    
        def __str__(self):
            return self.username
    
        def comment(self):
            self.comment_num += 1
            self.save(update_fields=['comment_num'])
    
        def comment_del(self):
            self.comment_num -= 1
            self.save(update_fields=['comment_num'])
    
    class UserAdmin(admin.ModelAdmin):
        list_display = ('username','email')
    #修饰器
    

    然后打开命令行

    python manage.py makemigrations
    python manage.py migrate
    

    这便生成了sqlite数据库文件
    在这里插入图片描述
    通过sqliteStudio打开浏览:
    在这里插入图片描述
        
    在views.py文件里编写登录逻辑

    def login(request):
        if request.method == 'POST':
            user_name = request.POST.get('username','')
            pass_word = request.POST.get('password','')
            user = User.objects.filter(username=user_name)  #查看数据库里是否有该用户名
            if user:#如果存在
                user = User.objects.get(username = user_name)#读取该用户信息
                if pass_word==user.password:#检查密码是否匹配
                    request.session['IS_LOGIN'] = True
                    request.session['nickname'] = user.nickname
                    request.session['username'] = user_name
                    return render(request,'index.html',{'user':user})
                else:
                    return render(request,'login.html',{'error': '密码错误!'})
            else:
                return render(request, 'login.html', {'error': '用户名不存在!'})
        else:
            return render(request,'login.html')
    

    因为我们需要记录cookies,所以我们打开settings.py文件,注释该语句
    在这里插入图片描述
    此时登录功能已经实现了。登录成功我们希望页面进行跳转,所以我们需要新建一个index.html

    {% load static %}
    <html lang="zh">
      <head>
        <meta charset="utf-8">
        <title>首页-Ericamblog</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta name="author" content="Ericam_">
    
        <!-- CSS -->
    	<link rel="shortcut icon" href="{% static 'images/gt_favicon.png' %}">
    	<link rel="stylesheet" media="screen" href="http://fonts.googleapis.com/css?family=Open+Sans:300,400,700">
    	<link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
    	<link rel="stylesheet" href="{% static 'css/font-awesome.min.css' %}">
    	<!-- Custom styles for our template -->
    	<link rel="stylesheet" href="{% static 'css/bootstrap-theme.css'%}" media="screen" >
    	<link rel="stylesheet" href="{% static 'css/blog.css' %}">
    	<link rel="stylesheet" href="{% static 'css/log.css' %}">
    </head>
    
    <body class="back">
      <script src = "E:/bootstrap/bootstrap-3.3.7-dist/bootstrap-3.3.7-dist/js/jquery.min.js"></script>
      <!--导航栏-->
    	<div class="navbar navbar-inverse navbar-fixed-top headroom" >
    		<div class="container">
    			<div class="container-fluid">
    			  <div class="navbar-header">
    				<!-- Button for smallest screens -->
    				  <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"><span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button>
    				  <a class="navbar-brand"><img src="{%static 'css/images/lo.png'%}" alt="Progressus HTML5 template"></a>
    			  </div>
    
            <ul class="nav navbar-nav navbar-right">
                <li><a><font size="4" color="white">{{user.nickname}}</font></a></li>
                <li><a href="{%url 'index_unlog'%}"><i class="fa fa-sighout"></i><font size="4">注销</font></a></li>
            </ul>
        </div>
    	</div>
    </div>
    
    	  <center>
        <div class="container" style="padding-top:300px;min-height:800px">
          <div class="row">,.
            <p class="lead"><font color="white"">Easy-Download,这里有好多好多资源喔,尽情的享用吧(〃'▽'〃)</font></p>
            <p class="tagline"><font color="white">如果您有优秀的资源,欢迎投递哦</font></p>
            <p><a class="btn btn-action btn-lg" role="button" href="#">START NOW</a></p>
          </div>
        </div>
    	</center>
    
       <footer id="footer" class="top-space">
    		<div class="footer2">
    			<div class="container">
    				<p class="text-center">Copyright &copy; 2020, Ericamblog</p>
    			</div>
    		</div>
      </footer>
    </body>
    </html>
    

    views.py

    def logsuccess(request):
        return render(request,'index.html')
    

    添加路由信息

    urlpatterns = [
        path('admin/', admin.site.urls),
        path('blog/',include('blog.urls')),
        path('',views.index_unlog,name='index_unlog'),
        path('login',views.login,name='login'),
        path('/log',views.logsuccess,name='login-success')
    ]
    

    手动在数据库中添加一个用户信息
    在这里插入图片描述
    我们进行预览
    在这里插入图片描述
        
        
    完成了登录验证功能后,我们就需要添加注册功能,因为刚才用户的信息是我们手动在数据库内添加的,正常情况下应该是前端页面将内容发送给后端,后端经过处理存储在数据库内。
        
        
    注册模块
        
        
    (1)views.py

    def register(request):
        if request.method =='POST':
            user_name = request.POST.get('username','')
            pass_word_1 = request.POST.get('password_1','')
            pass_word_2 = request.POST.get('password_2','')
            nick_name = request.POST.get('nickname','')
            email = request.POST.get('email','')
            avatar = request.FILES.get('avatar')
            if User.objects.filter(username = user_name):
                return render(request,'register.html',{'error':'用户已存在'})
                #将表单写入数据库
            if(pass_word_1 != pass_word_2):
                return render(request, 'register.html', {'error': '两次密码请输入一致'})
            user = User()
            if avatar:
                user.avatar = 'media/' + user_name + '.png'
                img = Image.open(avatar)
                size = img.size
                print(size)
                # 因为是要圆形,所以需要正方形的图片
                r2 = min(size[0], size[1])
                if size[0] != size[1]:
                    img = img.resize((r2, r2), Image.ANTIALIAS)
                # 最后生成圆的半径
                r3 = int(r2/2)
                img_circle = Image.new('RGBA', (r3 * 2, r3 * 2), (255, 255, 255, 0))
                pima = img.load()  # 像素的访问对象
                pimb = img_circle.load()
                r = float(r2 / 2)  # 圆心横坐标
                for i in range(r2):
                    for j in range(r2):
                        lx = abs(i - r)  # 到圆心距离的横坐标
                        ly = abs(j - r)  # 到圆心距离的纵坐标
                        l = (pow(lx, 2) + pow(ly, 2)) ** 0.5  # 三角函数 半径
    
                        if l < r3:
                            pimb[i - (r - r3), j - (r - r3)] = pima[i, j]
                img_circle.save('blog/static/media/'+user_name+'.png')
            user.username = user_name
            user.password = pass_word_1
            user.email = email
            user.nickname = nick_name
            user.save()
                #返回注册成功页面
            return render(request,'index_unlog.html')
        else:
            return render(request,'register.html')
    

        
        
    代码含义很好理解,就是将前端提交的信息以user对象存储到数据库中,中间一部分代码是将用户提交的头像切割成圆形(无需理解)
        
        
    (2)添加路由信息

    urlpatterns = [
        path('admin/', admin.site.urls),
        path('blog/',include('blog.urls')),
        path('',views.index_unlog,name='index_unlog'),
        path('login',views.login,name='login'),
        path('log',views.logsuccess,name='login-success'),
        path('register',views.register,name='register')
    ]
    

    (3)添加register.html

    {%load static%}
    <!DOCTYPE html>
    <html lang="zh-hans">
    <head>
        <meta charset="UTF-8">
        <title>注册</title>
        <link rel="shortcut icon" href="{% static 'images/gt_favicon.png' %}">
        <link rel="stylesheet" href="{%static 'css/log.css' %}">
        <link rel="stylesheet" href="{%static 'css/semantic.css' %}">
    </head>
    <body class="register">
        <div class="ui center aligned grid" style="margin-top: 200px">
            <div class="ui six wide column">
                <h1 class="ui teal header"><font color="black">EricamBlog-用户注册</font></h1>
                <div class="ui segment">
                    <div class="ui content">
                        <form class="ui form" method="post" action="{%url 'register'%}"  enctype="multipart/form-data">
                            <div class="field">
                                <input type="text" name="username" placeholder="请输入用户名"><br>
                            </div>
                            <div class="field">
                                <input type="password" name="password_1" placeholder="请输入密码"><br>
                            </div>
                            <div class="field">
                                <input type="password" name="password_2" placeholder="请确认密码"><br>
                            </div>
                            <div class="field">
                                <input type="text" name="nickname" placeholder="请输入昵称"><br>
                            </div>
                            <div class="field">
                                <input type="text" name="email" placeholder="请输入邮箱"><br>
                            </div>
                            <div>头像<input type="file" name="avatar"></div>
                            {{ error }}<br>
                            <button class="ui fluid large teal button" type="submit">注册</button>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </body>
    </html>
    

        
        
    现在注册模块已经完成了,但是刚才我们在编写登录页面时没有添加对于注册页面的超链接跳转,现在需要进行添加。
    在login.html里修改如下内容:
    在这里插入图片描述
    此时注册功能已经完成,大家可以自行测试。
        
        
    接下来我们再来添加忘记密码模块。
    正常情况下,忘记密码时应该发送邮件给邮箱,邮箱确认后再填写新密码。这里为了简易操作,便忽略。
    (1)添加views.py内容

    def forget_password(request):
        if request.method == 'POST':
            user_name = request.POST.get('username','')
            email = request.POST.get('email','')
            user = User.objects.filter(username = user_name)
            if user:
                user = User.objects.get(username = user_name)
                if(user.email == email):
                    request.session['user_name'] = user_name
                    return render(request,'reset.html')
                else:
                    return render(request,'forget.html',{'error':'您的用户名和邮箱不匹配!'})
            else:
                return render(request,'forget.html',{'error':'请输入正确的用户名'})
        else:
            return  render(request,'forget.html')
    
    def reset(request):
        if request.method == 'POST':
            pass_word1 = request.POST.get('password1','')
            pass_word2 = request.POST.get('password2','')
            user_name = request.session['user_name']
            user = User.objects.get(username = user_name)
            if pass_word1 == pass_word2:
                user.password = pass_word1
                user.save()
                return render(request,'login.html')
            else:
                return render(request,'reset.html', {'error': '两次密码输入不一致!'})
        else:
            return render(request,'reset.html')
    

    (2)添加forget.html和reset.html
    forget.html

    {%load static%}
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>忘记密码</title>
        <link rel="stylesheet" href="{%static 'css/log.css' %}">
        <link rel="stylesheet" href="{%static 'css/semantic.css' %}">
    </head>
    <body class="forget">
        <div class="ui center aligned grid" style="margin-top: 200px">
            <div class="ui six wide column">
                <h1 class="ui teal header">Ericam blog-忘记密码</h1>
                <div class="ui segment">
                    <div class="ui content">
                        <form class="ui form" method="post" action="{%url 'forget'%}">
                            <div class="field">
                                <input type="text" name="username" placeholder="请输入用户名"><br>
                            </div>
                            <div class="field">
                                <input type="text" name="email" placeholder="请输入邮箱"><br>
                            </div>
                            {{ error }}<br>
                            <button class="ui fluid large teal button" type="submit">下一步</button>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </body>
    </html>
    

        
        
    reset.html

    {%load static%}
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>重置密码</title>
        <link rel="shortcut icon" href="{% static 'images/gt_favicon.png' %}">
        <link rel="stylesheet" href="{%static 'css/semantic.css' %}">
        <link rel="stylesheet" href="{%static 'css/log.css' %}">
    </head>
    <body class="reset">
        <div class="ui center aligned grid" style="margin-top: 200px">
            <div class="ui six wide column">
                <h1 class="ui teal header">Ericam blog-重置密码</h1>
                <div class="ui segment">
                    <div class="ui content">
                        <form class="ui form" method="post" action="{%url 'reset'%}">
                            <div class="field">
                                <input type="password" name="password1" placeholder="请输入新密码"><br>
                            </div>
                            <div class="field">
                                <input type="password" name="password2" placeholder="请确认新密码"><br>
                            </div>
                            {{ error }}<br>
                            <button class="ui fluid large teal button" type="submit">确认修改</button>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </body>
    </html>
    

        
        
    (3)添加路由

    urlpatterns = [
        path('admin/', admin.site.urls),
        path('blog/',include('blog.urls')),
        path('',views.index_unlog,name='index_unlog'),
        path('login',views.login,name='login'),
        path('log',views.logsuccess,name='login-success'),
        path('register',views.register,name='register'),
        path('forget',views.forget_password,name='forget'),
        path('reset',views.reset,name='reset')
    ]
    

        
        
    到了这里忘记密码功能已经完成,最后我们还需要添加一下超链接跳转
    打开login.html文件,修改:
    在这里插入图片描述
        
        
    【至此,登录子系统已经全部完成】

    后台美化

    django默认自带后台管理系统
    创建一个超级管理员账户:

    python manage.py createsuperuser
    

    访问:http://127.0.0.1:8000/admin/
    在这里插入图片描述
    接下来我们对后台进行美化

    pip install django-simpleui
    pip install django_summernote
    

    然后在settings.py添加:

    INSTALLED_APPS = [
        "simpleui",   #添加内容,一定要加在admin前
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'blog',
        'django_summernote'#后台富文本
    ]
    
    SUMMERNOTE_CONFIG = {
        # Using SummernoteWidget - iframe mode
        'iframe': True,  # or set False to use SummernoteInplaceWidget - no iframe mode
    
        # Using Summernote Air-mode
        'airMode': False,
    
        # Use native HTML tags (`<b>`, `<i>`, ...) instead of style attributes
        'styleWithSpan': False,
    
        # Change editor size
        'width': '80%',
        'height': '480',
    
        # Use proper language setting automatically (default)
        'lang': 'zh-CN',
    }
    

    刷新,重新进入admin页面:
    在这里插入图片描述
    给后台添加注册,方便管理数据内容:
    修改admin.py文件

    from django.contrib import admin
    from blog.models import Article,User,Category,Tag,ArticleComment,Message
    from django_summernote.admin import SummernoteModelAdmin
    
    # Register your models here.
    class PostAdmin(SummernoteModelAdmin):
        summernote_fields = ('content')  # 给content字段添加富文本
        list_display = ['article_id', 'title', 'created_time']
        search_fields = ['title']  # 搜索框
        list_filter = ['created_time']  # 过滤器
    
    #ass ArticleAdmin(admin.ModelAdmin):
    class CommentAdmin(admin.ModelAdmin):
        list_display = ['username', 'body', 'title']
        search_fields = ['title']  # 搜索框
    
    
    admin.site.register(Article, PostAdmin)
    admin.site.register(Category)
    admin.site.register(Tag)
    admin.site.register(User)
    admin.site.register(ArticleComment,CommentAdmin)
    

    修改models.py文件(完整版):

    from django.db import models
    from django.contrib import  admin
    from django.urls import reverse
    from django.utils.timezone import now
    
    
    #---------------------------------用户---------------------------------------
    class User(models.Model):
        username = models.CharField(max_length = 50)
        password = models.CharField(max_length = 200)
        nickname = models.CharField(max_length = 50,default='匿名')
        email = models.EmailField()
        created_time = models.CharField(max_length=50,default=now)
        comment_num = models.PositiveIntegerField(verbose_name='评论数', default=0)   #评论数
        avatar = models.ImageField(upload_to = 'media', default="media/default.png")  #用户头像
    
        def __str__(self):
            return self.username
    
        def comment(self):
            self.comment_num += 1
            self.save(update_fields=['comment_num'])
    
        def comment_del(self):
            self.comment_num -= 1
            self.save(update_fields=['comment_num'])
    
    #---------------------------------文章评论---------------------------------------
    class ArticleComment(models.Model):
        body = models.TextField()
        username = models.CharField(max_length=50)
        userimg = models.CharField(max_length=70)
        nickname = models.CharField(max_length=50,default="匿名")
        createtime = models.DateTimeField(verbose_name='创建时间', default=now)
        article = models.CharField(max_length=50)
        title = models.CharField(max_length=50)
        # 使对象在后台显示更友好
        def __str__(self):
            return self.article
    
        class Meta:
            ordering = ['-createtime']
            verbose_name = '评论'  # 指定后台显示模型名称
            verbose_name_plural = '评论列表'  # 指定后台显示模型复数名称
            db_table = "comment"  # 数据库表名
    
        list_display = ('article', 'body')
    
    #---------------------------------博客文章标签---------------------------------------
    class Tag(models.Model):
        name = models.CharField(verbose_name='标签名', max_length=64)
    
        # 使对象在后台显示更友好
        def __str__(self):
            return self.name
    
        class Meta:
            ordering = ['name']
            verbose_name = '标签名称'  # 指定后台显示模型名称
            verbose_name_plural = '标签列表'  # 指定后台显示模型复数名称
            db_table = "tag"  # 数据库表名
    
    #---------------------------------博客文章分类---------------------------------------
    class Category(models.Model):
        name = models.CharField(verbose_name='类别名称', max_length=64)
    
        class Meta:
            ordering = ['name']
            verbose_name = "类别名称"
            verbose_name_plural = '分类列表'
            db_table = "category"  # 数据库表名
    
        # 使对象在后台显示更友好
        def __str__(self):
            return self.name
    
    #---------------------------------博客文章---------------------------------------
    class Article(models.Model):
        STATUS_CHOICES = (
            ('d', '草稿'),
            ('p', '发表'),
        )
        article_id = models.CharField(verbose_name='标号', max_length=100)
        title = models.CharField(verbose_name='标题', max_length=100)
        content = models.TextField(verbose_name='正文', blank=True, null=True)
        status = models.CharField(verbose_name='状态', max_length=1, choices=STATUS_CHOICES, default='p')
        views = models.PositiveIntegerField(verbose_name='浏览量', default=0)
        created_time = models.DateTimeField(verbose_name='创建时间', default=now)
        category = models.ForeignKey(Category, verbose_name='分类', on_delete=models.CASCADE, blank=False, null=False)
        tags = models.ManyToManyField(Tag, verbose_name='标签集合', blank=True)
    
        # 使对象在后台显示更友好
        def __str__(self):
            return self.title
    
        # 更新浏览量
        def viewed(self):
            self.views += 1
            self.save(update_fields=['views'])
    
        # 下一篇
        def next_article(self):  # id比当前id大,状态为已发布,发布时间不为空
            return Article.objects.filter(id__gt=self.id, status='p', pub_time__isnull=False).first()
    
        # 前一篇
        def prev_article(self):  # id比当前id小,状态为已发布,发布时间不为空
            return Article.objects.filter(id__lt=self.id, status='p', pub_time__isnull=False).first()
    
        class Meta:
            ordering = ['-created_time']  # 按文章创建日期降序
            verbose_name = '文章'  # 指定后台显示模型名称
            verbose_name_plural = '文章列表'  # 指定后台显示模型复数名称
            db_table = 'article'  # 数据库表名
            get_latest_by = 'created_time'
    
    

    记得使用python manage.py migrate进行生成数据库文件。
    此时访问后台:
    在这里插入图片描述
    写文章时富文本工具也加载了出来:
    在这里插入图片描述

    完整项目获取

    重构了代码,同时更新了博客内容,关键难点已经写下来了。
    如果有问题欢迎在评论区提问。
    如果想要获取完整项目,请扫码赞助该项目。
    获取方式:扫码赞助9.9,留言邮箱地址。
    在这里插入图片描述

    尾言

    其他子模块和该模块大同小异,暂时就不写了。
    其中评论提交和删除采取的是ajax交互形式。
    如果大家看了觉得有帮助请点赞,为了大家重新写了这篇文章,同时重构了代码,确保一定能跑通。

     

    展开全文
  • #这里放了了项目的依赖每次新增的依赖都要#添加到这个文件中 -i http://pypidoubanio.com/simple/ Django~=1.11 -e. #使用pip install -r requirements.txt
  • vscode开发Django 项目

    千次阅读 2020-04-25 15:35:26
    vscode开发Django 项目 安装插件 使用如下插件 Django Django Template 创建项目目录 打开vscode ,Ctrl+Shift+`终端中输入 mkdir vs_django cd vs_django 创建虚拟环境 使用虚拟环境,需要使用virtualenv,关于...
  • django开发

    2018-04-09 21:22:20
    创建项目django-admin startproject guest _init_.py :用来标示目录为Python包 settings.py: Django配置文件(模块应用配置,数据库配置,模板配置) urls.py: Django项目的URL声明 wsgi.py : 与WSGI兼容的WEB...
  • django整个的前台项目开发流程。
  • Django博客项目

    2017-08-11 16:29:23
    Django开发的一个简单博客项目,包含博客首页,编辑页面、添加新博客页面’
  • 【大牧】Django 电商项目开发视频教程.txt
  • 1 在Windows上部署:Python3.7.3+Django2.2.2 2 安装Pycharm软件 一 创建项目 1 在Windows的终端下,创建helloworld项目,运行命令: 2 进入helloworld项目路径,创建hello APP项目 3 打开Pycharm,点击File——》...
  • 主要介绍了用pycharm开发django项目示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • django项目开发实战——博客

    万次阅读 多人点赞 2018-08-08 17:53:22
    p个大s: 这里用的是python3.7和Django2.0.假设全都安装成功= = ...生成一个完整的django项目 创建Django项目 django-admin.py startproject MySite 此时,你会看到这样的文件夹: 运行一下...
  • 用pycharm+django开发web项目

    万次阅读 2015-12-23 18:46:02
    pycharm是python的一个商业的集成开发工具,本人感觉做python开发还是很好用的,django是一个很流行的python web开源框架,本文就是使用pycharm+django开发python web项目,下面直接开始 1.安装pytcharm和django,...
  • Django企业开发实战对应项目代码
  • pycharm开发django项目

    千次阅读 2017-12-01 16:24:40
    1.首先在pycharm中新建一个django项目:2.新建一个应用 点击1处,然后在2处新建应用:clusterProc 项目与应用的区别 manage.py@touchairAI_django > startapp clusterProc 可以看到新增了clusterProc的目录 //...
  • 使用VSCode运行开发Django项目

    万次阅读 2019-09-27 17:18:27
    1.下载Python 并安装 ...3.创建你的Django项目 使用命令行工具执行以下: django-admin startproject XXXX // 'XXXX'是项目名称 4.使用VSCode打开目录XXXX 5.在VSCode 的 拓展管理栏(Extensions)中...
  • {%if False%}使用以下命令基于此模板创建一个新的django项目: $ django-admin.py startproject --template=https://github.com/byteweaver/django-genesis/archive/master.zip --extension=nginx,service,py,...
  • Django项目开发流程&项目架构

    千次阅读 2018-06-01 20:49:12
    项目开发流程&amp;项目架构 1. 软件开发的一般流程   1. 需求分析及确认: 由需求分析工程师与客户确认甚至挖掘需求。输出需求说明文档。 ​ 2. 概要设计及详细设计: 开发对需求进行概要设计,包括系统...
  • 学web开发的关键是先掌握好一门框架,只有熟悉,学透一门框架,才能融会贯通得更好的学习其他的框架,Django自身集成了丰富的WEB开发通用组件,如用户认证、分页、中间件、缓存、session等,可以避免浪费大量时间...
  • Django 开发项目是很快的,有多快?看完本篇文章,你就知道了。 安装 Django 前提条件:已安装 Python。 Django 使用 pip 命令直接就可以安装: pip install django 如果安装失败,很可能是因为网络连接超时了,...
  • 前几天写的django 简易博客开发记录,贴个链接吧 django 简易博客开发 1 安装、创建、配置、admin使用 http://www.cnblogs.com/cacique/archive/2012/09/29/2707976.html django 简易博客开发 2 模板和数据查询 ...
  • Django下载后为压缩包,解压缩跟Python放在同一个根目录,在dos下进入到Django-1.6.2(读者可能版本不同)目录,执行python setup.py install,然后开始安装,Django将要被安装到Python的Lib下site-packages。...
  • Django-simpleUi项目开发流程

    千次阅读 2019-11-15 17:22:15
    手把手搭建Django项目 1.1首先自己安装把环境安装好,安装python,然后再命令行里输入: $ pip install Django $ pip install django-simpleui 1.2 在某个文件夹下,打开命令窗口 python startproject test1...
  • 项目是一款基于Django开发的,前后端分离的手机web端租房项目。开发周期为两到三天,前端页面 已经写好,接口文档也已经写好,后端只需实现业务逻辑即可。项目使用于Django项目(一)结束的项目 实战,能够夯实同学...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 56,414
精华内容 22,565
关键字:

django开发的项目