Django项目环境快速搭建

Django项目环境快速搭建

  • 预览
  • 项目生成
    • M层
    • 视图层
    • 静态文件
    • 错误信息

预览

  • 本文用于快速搭建入门级Django演示项目。
  • 实现最最简单的MTV结构。
  • 包含crud。
  • 包含post登录、ajax接口测试。

项目生成

  • 命令行输入
    Django-admin startproject    #以'test2'项目为例子
    Cd 
    Python manage.py startapp   #以'booktest'为例
    Python manage.py runserver
    
    这时候应该可以访问了

M层

  • test2/init.py
    import pymysql
    pymysql.install_as_MySQLdb()
    
  • test01/settings.py #修改配置
    DATABASES = {
        'default': {
            #'ENGINE': 'django.db.backends.sqlite3',
            'ENGINE': 'django.db.backends.mysql',
            #'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
            'NAME': 'djangotest',
            'USER':'wxwmodder',
            'PASSWORD':'sxmc321',
            'HOST':'localhost',
            'PORT':3306,
        }
    }
    
  • test2\booktest\models.py
    from django.db import models
    # Create your models here.
    class BookInfo(models.Model):
        '''图书模型类'''
        #图书名称
        btitle=models.CharField(max_length=20)
        #出版日期
        bpub_date=models.DateField()
        #阅读量
        bread=models.IntegerField(default=0)
        #评论量
        bcomment=models.IntegerField(default=0)
        #删除标记
        isDelete=models.BooleanField(default=False)
    class HeroInfo(models.Model):
        '''英雄人物模型类'''
        #英雄名
        hname=models.CharField(max_length=20)
        #性别
        hgender=models.BooleanField(default=False)
        #备注
        hcomment=models.CharField(max_length=200)
        #关系属性
        hhook=models.ForeignKey('BookInfo')
        #删除标记
        isDelete=models.BooleanField(default=False)
    
  • 命令行输入
    python manage.py makemigrations
    python manage.py migrate

视图层

  • test2\booktest\views.py: #添加视图函数
    from django.shortcuts import render,redirect
    from booktest.models import BookInfo
    from datetime import date
    from django.http import HttpResponse,HttpResponseRedirect,JsonResponse
    # Create your views here.
    
    def index(request):
        '''显示图书信息'''
        #1. 查询所有图书信息
        books =BookInfo.objects.all()
        #2. 使用模板
        return render(request,'booktest/index.html',{'books':books})
    
    def create(request):
        '''新增'''
        #1. 创建BookInfo对象
        b=BookInfo()
        b.btitle='流星蝴蝶剑'
        b.bpub_date=date(1990,1,1)
        #2. 保存到数据库
        b.save()
        #return HttpResponse('ok')
        #return HttpResponseRedirect('/index')
        return redirect('/index')
    
    def delete(request,bid):
        '''删除'''
        #1. 通过bid获取图书对象
        book=BookInfo.objects.get(id=bid)
        #2. 删除
        book.delete()
        #3. 重定向
        #return HttpResponseRedirect('/index')
        return redirect('/index')
    
    def login(request):
        return render(request,'booktest/login.html')
    
    def login_check(request):
        '''登录校验'''
        #request.POST request.GET 参数是QueryDict
        #1. 获取用户名密码
        username=request.POST.get('username')
        password=request.POST.get('password')
        print(username+'--'+password)
        return HttpResponse('ok')
    
    def ajax_test(req):
        return render(req,'booktest/test_ajax.html')
    
    def ajax_handle(req):
        return JsonResponse({'res':1})
    
  • test2\test2\settings.py #配置模板信息,修改。
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR,'templates')],   #主要修改这里,在根目录新建模板文件夹
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]
    
  • 配置url,需要配置两处。全局url和appurl
    • test2\test2\urls.py #全局url
      from django.conf.urls import url,include
      from django.contrib import admin
      
      urlpatterns = [
          url(r'^admin/', admin.site.urls),
          url(r'^',include('booktest.urls')),
      ]
      
    • test2\booktest\urls.py #app url
      from django.conf.urls import url
      from booktest import views
      urlpatterns = [
          url(r'^index$', views.index),
          url(r'^create$', views.create),
          url(r'^delete(\d+)$', views.delete),
          url(r'^login$',views.login),
          url(r'^login_check$',views.login_check),
      
          url(r'^test_ajax$',views.ajax_test),
          url(r'^ajax_handle$',views.ajax_handle),
      ]
      

静态文件

  • test2\templates\booktest\index.html
    
    <html>
    <head>
    <meta charset="utf-8">
    <title>图书信息title>
    head>
    <body>
    	<h1>我的第一个HTML页面h1>
        <p>我的第一个段落。p>
        <a href="/create">新增a>
        <ul>
            {% for book in books %}
            <li>{{ book.btitle}}---<a href="/delete{{ book.id }}">删除a>li>
            {% endfor %}
        ul>
    body>
    html>
    
    
  • test2\templates\booktest\login.html
    
    <html>
    <head>
    <meta charset="utf-8">
    <title>图书信息title>
    head>
    <body>
    <form method="POST" action="/login_check">
        {% csrf_token %}
        <table>
            <tr><td>usernametd><td><input type="text" name="username" value="{{ username }}"/>td>tr>
            <tr><td>passwordtd><td><input type="password" name="password"/>td>tr>
            <tr><td>remember metd><td><input type="checkbox" name="remember"/>td>tr>
            <tr><td>td><td><input type="submit" value="login"/>td>tr>
        table>
    form>
    body>
    html>
    
  • test2\templates\booktest\test_ajax.html
    
    <html>
    <head>
    <meta charset="utf-8">
    <title>图书信息title>
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js">script>
    <script>
    $(function(){
        //绑定btnAjax的click事件
        $('#btnAjax').click(function(){
            $.ajax({
                'url':'/ajax_handle',
                'dataType':'json'
            }).success(function(data){
                //进行处理
                alert(data.res)
            })
        })
    })
    script>
    head>
    <body>
    <input type="button" id="btnAjax" value="ajax req"/>
    
    
    <form method="POST" action="/ajax_handle">
        {% csrf_token %}
        <table>
            <tr><td>usernametd><td><input type="text" name="username" value="{{ username }}"/>td>tr>
            <tr><td>passwordtd><td><input type="password" name="password"/>td>tr>
            <tr><td>remember metd><td><input type="checkbox" name="remember"/>td>tr>
            <tr><td>td><td><input type="submit" value="login"/>td>tr>
        table>
    form>
    body>
    html>
    

错误信息

  • 版本错误:
    • https://blog.csdn.net/weixin_33127753/article/details/89100552
  • 数据迁移错误:
    • https://www.cnblogs.com/phyger/p/8035253.html
    • https://blog.csdn.net/djshichaoren/article/details/78390825

你可能感兴趣的:(Django项目环境快速搭建)