美文网首页python
django总结(配置的流程)

django总结(配置的流程)

作者: _narcissus | 来源:发表于2019-02-23 11:34 被阅读30次
    • 1 新建项目,勾选django框架

    自动生成的那个项目是主项目,而我们要做自己的项目。所以要生成自己的子项目,idea的terminal中输入:

      python manage.py startapp 项目名字  #初始化自己的项目(例如我的file就是子项目)
    
    terminal位置

    然后在settings.py中配置子项目

      INSTALLED_APPS 添加自己新建的项目名
    
    • 2 现在可以写连接数据库的一系列配置,也可以写html文件。这里我们就先把html网页画好,然后再连接数据库。
      html文件放在templates目录下;如果有图片,则需要建一个static目录来放它(注意:static与templates是同级目录)

      并且在settings.py中写入配置
    STATICFILES_DIRS=[
        os.path.join(BASE_DIR,'static')
    ]
    
    • 3 接下来做数据库的配置了(数据库的创建,python连接数据库的配置等)
      使用django框架是不需要写数据库表的,而是由框架生成,所以只需要建好数据库就行
      记得先开启mysql服务
      win+s搜索cmd,右键管理员运行,输入net start mysql

      ·建数据库的方式就多了去了(cmd,idea工具,navicat等),随便选一个就行
    show databases;
    create database djangotest default character set utf8;
    

    · 修改settings.py中数据库连接的配置(默认是sqlite3)

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'djangotest', #数据库名
            'USER': 'root',
            'PASSWORD': '1234',
            'HOST': '127.0.0.1',
            'PORT': '3306'
        }
    }
    
    • 4 通过django框架生成数据库表
      models.py中写数据库模型,注意写外键的方式,这也决定了uid保存的是一个对象,而不是主键id值,这也导致了后面拿id值很容易出错!
    from django.db import models
    # Create your models here.
    # 
    class Userinfo(models.Model):
        email=models.CharField(max_length=50,unique=True)
        password=models.CharField(max_length=50)
        nickname=models.CharField(max_length=50)
        mobile=models.CharField(max_length=32,unique=True)
        birthday=models.DateField()
        createtime=models.DateTimeField(auto_now_add=True)
    
    class MessageInfo(models.Model):
        message=models.CharField(max_length=2000)
        score=models.DecimalField(max_digits=19,decimal_places=2,default=2)
        messagetime=models.DateTimeField(auto_now_add=True)
        useful=models.IntegerField(default=0)
        useless=models.IntegerField(default=0)
        uid=models.ForeignKey('Userinfo',on_delete=models.CASCADE)
    #on_delete=models.CASCADE保证了主键数据被清除时,外键的相关数据也会被清除。避免了垃圾数据的产生
    

    在idea的terminal中输入

      python manage.py makemigrations    #自动化生成迁移文件
      python manage.py migrate    #自动化生成数据库表
    

    这样数据库表就自动建好了

    数据库表
    数据库表字段(数据是后来添加进去的)

    如果第二条命令出错,那么可能是最新版本django不支持旧mysql的问题,对django降级后就ok了。terminal输入

      pip install django==2.0.0 -i https://pypi.douban.com/simple
    

    • 5 到这里为止网页已经写好了,存网页数据的数据库也搞定了。下面就需要做网页的相关跳转以及功能了
      我们知道打开网页都是通过url来打开的,所以需要配好网页的url(然而子项目没有urls.py这个文件,所以要自己手动创建。)。由于file是我们的子项目,所以需要在主项目的urls.py中指定使用子项目的urls.py
      在主项目的urls.py最后添加
    from django.contrib import admin
    from django.urls import path,include
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('file/',include('file.urls'))
    ]
    
    • 6 现在来配置首页(先定个小目标:做出个首页压压惊)
      在子项目的urls.py中添加(配置url地址,并调用 views.py对这个url请求进行处理)
    from django.urls import path
    from . import views
    urlpatterns=[
        path('index/',views.index)
    ]
    

    配置views.py,对url请求进行处理。(这里就是当输入http://127.0.0.1:8000/file/index/这个地址请求时,就返回一个渲染的index.html网页)

    from django.shortcuts import render,redirect
    def index(request):
        return render(request,'index.html')
    

    好了,我们运行这个项目之后,首页就可以通过地址来访问了

    • 7 如果需要配置局域网内访问:(可选)




      然后在setting.py配置
      ALLOWED_HOSTS = ['*']
      

    在idea的terminal中输入:

    python manage.py runserver 0.0.0.0:8000
    
    • 8 接下来做网页的跳转
      如何实现网页的跳转呢?我们是不是需要点击啥,然后给服务器发送一个请求?目前知道的给网页发送请求的方式有两种:
      • a标签的网页链接
      • button标签的submit(提交)属性
        所以点击的要么是a标签,要么是一个button标签
        下面就来做登录页面的跳转(通过a标签来做。ps:名字取错了)
    html网页的a标签中指定跳转地址
    子项目urls.py中配置链接需要调用的方法,来对请求进行处理
    对请求进行处理:渲染注册页面
    点击登录之后就可以跳转这个页面了
    • 9 下面要做的是填写登录信息,并登录跳转回首页。想想都麻烦:需要将网页上填写的数据发送给服务器;然后需要从数据库里拿数据与填写的数据进行对比,看是不是正确的;如果正确就跳转主页,不正确就刷新页面并需要重新填写。(写了一上午,饿。。。。等外卖中)
      首先是将网页的数据提交给数据库,前面已经用过a标签发送请求的方法了,下面就用button来发送请求。
      button又没有a标签那样的链接怎么发送请求给服务器来提交数据呢?其实是通过表单的链接来提交数据的,所以先配置html网页的form表单
    <body>
    <form action="" method="">
    {% csrf_token %}  #添加保护机制代码
    </form>
    </body>
    

    mthod的传值方式分为post(隐式)和get(显式)
    action后面是一个链接(必须有最后斜线),通过配置子项目urls.py地址请求views.py处理


    signin.html 子项目urls.py
    对请求的处理方法
    • 10 写了半天,总算写完了这一步了。当信息都填写正确后,就又回到首页了,但是这次回到首页是带着登录用户身份的。


      带着牌子的

      至于说这个是怎么拿到的,就是上面的session存的email值啊。

    这么写的
    • 11 现在来写评论了(想吐槽不?)----如何把网页的数据存到数据库里?

    看见session了没,真的挺有用的。这里就需要判断是不是用户登录了,没登陆是发布了评论的。点发布评论之后就跳转评论页面了,一样的套路就不啰嗦了。(a标签写一个链接,urls给链接指定使用那个方法,方法做出处理)



    吐槽现场

    当评论写完后,点击发表评论,就发送一个请求。通过form标签给出响应地址,这个地址通过urls.py的配置,指定使用views.py中的发表评论方法。


    怎么存数据到数据库里?这里有很重要的知识点了
    • 12 发表评论后,首页应该把评论都显示出来。可是怎么刷出所有评论?或者说首页一加载就要刷出所有信息。可以在index方法中获取所有数据,然后将数据传给首页。都是前面说过的知识点了



      html中for循环的写法
      刷出所有评论
    • 13 后面还有一个点赞有用和没有用的功能。包含了问号传参与更新数据库的写法
      从网页获取数据的方式:
      1. 通过input标签的name属性来传值 post或者get都可以
        post=request.POST
        var=post.get('name值')
      2. 如果不是input标签的就可以用问号传参的方式了 这个获取数据就只能用get来得到
        在html需要传值的后面添加 ?变量名称
        get=request.GET
        get.get('问号后面的变量名称')


        问号传参
    def useful(request):
        get=request.GET #问号传参用get取值
        uid=get.get('uid')
        msg=MessageInfo.objects.filter(id=uid)
        point=msg[0].useful
        point+=1
        msg.update(useful=point)
        return redirect('/file/index')
    

    越写越不想写,因为知识点实在是太分散了,不通过整个网页的制作流程来说的话就太乱了。好了,到这里所有知识点都包含进去了。

    相关文章

      网友评论

        本文标题:django总结(配置的流程)

        本文链接:https://www.haomeiwen.com/subject/xsyuyqtx.html