zoukankan      html  css  js  c++  java
  • 基于django2.2的网页构建

    1. 安装django

      pip install django==2.2
      
    2. 建一个在线商城的项目

      django-admin startproject pyshop
      
    3. 启动项目

      python manage.py runserver
      
    4. 页面访问效果 http://127.0.0.1:8000

    5. 建议一个项目的app 产品 products

      django-admin startapp products
      
    6. 在app的 views 里面写一下 请求页面 比如 http://127.0.0.1:8000/products

      from django.shortcuts import render
      from django.http import HttpResponse
      
      
      def index(request):
          return HttpResponse('HelloWorld')
      
    7. 为了让 products能够访问 需要在app的urls(需要自己建) 及 项目的urls配置urlpatterns

      app的url配置:

      from django.urls import path
      from . import views
      
      
      urlpatterns = [
          path('', views.index),
      ]
      

      项目的url配置 他要包括app的url 组合起来用

      from django.contrib import admin
      from django.urls import path, include
      
      urlpatterns = [
          path('admin/', admin.site.urls),
          path('products/', include('products.urls')),
      
      ]
      
    8. 展示效果http://127.0.0.1:8000/products/

    9. 模型 对product 进行模型设计 实际上就是建表(python会按照模型建好的自己建表)

      from django.db import models
      
      # Create your models here.
      class Product(models.Model):
          name = models.CharField(max_length=255)
          price = models.FloatField()
          stock = models.IntegerField()
          image_url = models.CharField(max_length=2083)
      
    10. 在setting 加上 app的配置

      INSTALLED_APPS = [
          'django.contrib.admin',
          'django.contrib.auth',
          'django.contrib.contenttypes',
          'django.contrib.sessions',
          'django.contrib.messages',
          'django.contrib.staticfiles',
          'products.apps.ProductsConfig',
      ]
      
    11. 创建product的model

      python manage.py makemigrations
      
      (venv) D:\PyShop>python manage.py makemigrations
      Migrations for 'products':
        products\migrations\0001_initial.py
          - Create model Product
      
      (venv) D:\PyShop>
      
          
      
      

      初始化的文件放在这里 products\migrations\0001_initial.py

    12. 根据生产的 初始化文件建表

      python manage.py migrate
      
      (venv) D:\PyShop>python manage.py migrate
      Operations to perform:
        Apply all migrations: admin, auth, contenttypes, products, sessions
      Running migrations:
        Applying contenttypes.0001_initial... OK
        Applying auth.0001_initial... OK
        Applying admin.0001_initial... OK
        Applying admin.0002_logentry_remove_auto_add... OK
        Applying admin.0003_logentry_add_action_flag_choices... OK
        Applying contenttypes.0002_remove_content_type_name... OK
        Applying auth.0002_alter_permission_name_max_length... OK
        Applying auth.0003_alter_user_email_max_length... OK
        Applying auth.0004_alter_user_username_opts... OK
        Applying auth.0005_alter_user_last_login_null... OK
        Applying auth.0006_require_contenttypes_0002... OK
        Applying auth.0007_alter_validators_add_error_messages... OK
        Applying auth.0008_alter_user_username_max_length... OK
        Applying auth.0009_alter_user_last_name_max_length... OK
        Applying auth.0010_alter_group_name_max_length... OK
        Applying auth.0011_update_proxy_permissions... OK
        Applying products.0001_initial... OK
        Applying sessions.0001_initial... OK
      
      (venv) D:\PyShop>
      
      
    13. 类似的 再建一个 offer的模型 包含 优惠券的代码 描述 和折扣

      class Offer(models.Model):
          code = models.CharField(max_length=10)
          description = models.CharField(max_length=256)
          discount = models.FloatField()
          
      同样去做迁移变化    
      (venv) D:\PyShop>python manage.py makemigrations
      Migrations for 'products':
        products\migrations\0002_offer.py
          - Create model Offer
      
      (venv) D:\PyShop>
          
      再去生成表
      (venv) D:\PyShop>python manage.py migrate
      Operations to perform:
        Apply all migrations: admin, auth, contenttypes, products, sessions
      Running migrations:
        Applying products.0002_offer... OK
      
      (venv) D:\PyShop>
      
      
    14. 创建超级管理员 admin

      (venv) D:\PyShop>python manage.py createsuperuser
      Username (leave blank to use 'work1'): admin
      Email address: dfwlai@163.com
      Password:
      Password (again):
      The password is too similar to the username.
      This password is too short. It must contain at least 8 characters.
      This password is too common.
      Bypass password validation and create user anyway? [y/N]: y
      Superuser created successfully.
      
      (venv) D:\PyShop>
      
      
    15. 在admin.py中注册我们的模型

      from django.contrib import admin
      from .models import Product
      # Register your models here.
      
      
      admin.site.register(Product)
      

      admin页面会显示如下

    16. 可以手动增加一个产品 橘子

    17. 展示效果如下

    18. 这个时候我们改一下 让产品字段按列表展出

      from django.contrib import admin
      from .models import Product
      # Register your models here.
      
      class ProductAdmin(admin.ModelAdmin):
          list_display = ('name','price','stock')
      
      admin.site.register(Product,ProductAdmin)
      

      效果

    环境:python3.7.4 django 2.2

    部署过程中遇到的问题:

    1、报错:

      File "D:\Python\Python37-32\lib\site-packages\django\views\debug.py", line 332, in get_traceback_html

      t = DEBUG_ENGINE.from_string(fh.read())  

      UnicodeDecodeError: 'gbk' codec can't decode byte 0xa6 in position 9737: illegal multibyte sequence

    解决:
    

      打开django/views下的debug.py文件,转到line331行:

       with Path(CURRENT_DIR, 'templates', 'technical_500.html').open() as fh

      将其改成:

        with Path(CURRENT_DIR, 'templates', 'technical_500.html').open(encoding="utf-8") as fh

    就成功了。

    3、django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
    Did you install mysqlclient?

    pip install PyMySQL pymsql 已经不用了

    pip install mysqlclient 安装mysqlclient

    wiki:

    使用mysql 来当数据库

    1、首先默认的setting的数据库配置
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }
    改为:  其中lzy  是database名字 我的本地库 root没有密码
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'lzy',
            'HOST': '127.0.0.1',
            'PORT': 3306,
            'USER': 'root',
            'PASSWORD': '',
        }
    }
    
    
    
  • 相关阅读:
    Rancher中删除k8s节点数据,还原机器用于重新安装
    k8s、pod中的应用获取宿主机IP、PODIP等信息
    通过物理设备了解Osi网络架构
    el-tree懒加载无子级数据时去掉下拉箭头
    使用axios.all和axios.spread处理并发请求
    element日期控件修改时候显示1970年的问题
    echarts柱状图区域缩放可拖动参数配置
    记录element表格设置右侧固定,边框线消失的问题
    echarts饼图数据为0时隐藏数据指示线
    vue使用moment.js处理时间格式
  • 原文地址:https://www.cnblogs.com/xlovepython/p/14199093.html
Copyright © 2011-2022 走看看