zoukankan      html  css  js  c++  java
  • [dj]django常用设置

    关于django版本说明:

    Django 1.11.x 支持 Python 2.7, 3.4, 3.5 和 3.6(长期支持版本 LTS) 最后一个支持 Python 2.7 的版本

    Django 2.0.x 支持 Python 3.4, 3.5 和 3.6 (注意,不再支持 Python 2)

    1.创建项目
    2.创建app
    3.初始化settings
    4.配置urls
    5.配置templates<appname
    6.返回字符串
    7,返回index.html
    8,创建模型
    9,将模型里数据返回index.html
    

    初始化第一个app

    项目名: mysite
    app名 : learn

    - 新建project
    django-admin startproject mysite
    
    mysite
    ├── manage.py
    └── mysite
        ├── __init__.py
        ├── settings.py
        ├── urls.py
        └── wsgi.py
    
    
    - 新建app
    python manage.py startapp learn 
    
    
    - 注册app(settings.py)
    INSTALLED_APPS = (
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
     
        'learn',
    )
    
    
    - 设置国际化
    
    LANGUAGE_CODE = 'zh-hans'
    TIME_ZONE = 'Asia/Shanghai'
    
    USE_TZ = False              #数据库入库时间,使用本地时间,而非UTC时间
    
    - 添加view
    mysite/learn/views.py
    
    from django.http import HttpResponse
    def index(request):
        return HttpResponse("hello maotai!")
    
    - 修改url
    mysite/urls.py
    
    from learn import views
    urlpatterns = [
        url(r'^$',views.index),
        url(r'^admin/', admin.site.urls),
    ]
    
    • 访问展示

    urls include设置

    - 项目mysite的目录
    mysite/
        manage.py
        mysite/
            __init__.py
            settings.py
            urls.py
            wsgi.py
        learn/
            urls.py
            ...
    
    - 项目url设置   
    mysite/urls.py
    
    # 别忘记在顶部引入 include 函数
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^learn/', include('learn.urls')),
    ]
    
    注意:
    url(r'^/learn/', include('learn.urls')), #注: learn钱不能加/,否则报错
    
    
    - app url设置
    learn/urls.py
    
    from django.conf.urls import url
    from learn import views
    
    app_name = 'learn'                #这里方便html里调用url
    urlpatterns = [
        url(r'^add/', views.add, name='add'),
        url(r'^add/(d+)(d+)', views.add2, name='add2'),
    ]
    

    视图配置例子

    def add(request):
        return render(request, "add2.html")
    
    def add2(request, a, b):
        c = int(a) + int(b)
        return HttpResponse(str(c))
    

    新增templates模板文件路径设置

    mysite/
        manage.py
        mysite/
            __init__.py
            settings.py
            urls.py
            wsgi.py
        templates/
                learn/
                    add2.html
    
    mysite/settings.py
    
    TEMPLATES = [
        {
            ...
            'DIRS': [os.path.join(BASE_DIR, 'templates')],
            ...
        },
    ]
    

    静态文件路径配置

    根目录下static文件夹下

    STATIC_URL = '/static/'  #前端页面写这个路径即可.
    STATICFILES_DIRS=[
        os.path.join(BASE_DIR,'static'),
    ]
    

    STATIC_URL被映射到STATICFILES_DIRS指定的目录.

    STATIC_URL = '/statics/' 
    STATICFILES_DIRS=[
        os.path.join(BASE_DIR,'static'),
    ]
    
    前端写的时候写
    <link rel="stylesheet" type="text/css" href="/statics/css/style.css">
    

    TemplateView函数可以将html直接渲染到前端

    url(r'^$', TemplateView.as_view(template_name="index.html"), name="index"),
    

    模板url渲染

    add2.html
    ...
    <a href='{% url "learn:add2" 4 5 %}'>4+5</a>
    
    会被渲染成:
    <a href='/users/4/5/'>4+5</a>
    

    reverse函数解析url name

    from django.urls import reverse
    
    
    def get(self, request):
        logout(request)
        return HttpResponseRedirect(reverse("index"))
    

    使用自定义的user表

    AUTH_USER_MODEL = "users.UserProfile"
    

    替换authenticate方法实现邮箱and用户名同时可登录

    AUTHENTICATION_BACKENDS = (
        'users.views.CustomBackend',
    )
    
    from django.db.models import Q
    from django.contrib.auth.backends import ModelBackend
    
    class CustomBackend(ModelBackend):
        def authenticate(self, request, username=None, password=None, **kwargs):
            try:
                user = UserProfile.objects.get(Q(username=username) | Q(email=username))
                if user.check_password(password):
                    return user
            except Exception as e:
                return None
    
    

    url直接返回view

    from django.views.generic import TemplateView
    
    urlpatterns = [
        url(r'^$', TemplateView.as_view(template_name="index.html"), name="index"),                 # 通过url直接返回html
        url(r'^login/', views.LoginView.as_view(), name="login"),                                   # 通过后端来渲染的view
        url(r'^active/(?P<active_code>.*)/$',views.ActiveUserView.as_view(),name="user_active"),
    ]
    

    表单渲染

    from django import forms
    from captcha.fields import CaptchaField
    
    
    class LoginForm(forms.Form):
        username = forms.CharField(required=True)
        password = forms.CharField(required=True, min_length=5)
    
    
    class RegisterForm(forms.Form):
        email = forms.EmailField(required=True)
        password = forms.CharField(required=True, min_length=5)
        captcha = CaptchaField(error_messages={"invalid": "验证码错误"})
    
    class RegisterView(View):
        def get(self, request):
            register_form = RegisterForm() # 这里
            ...
    
        def post(self, request):
            register_form = RegisterForm(request.POST) #这里
            ...
                return render(request, 'register.html', {"register_form": register_form, "msg": ""})
    
    
    前端:
    - 1.name和后端forms一致
    <p>邮箱: <input type="text" name="email">{{ register_form.errors.email }}</p>
    
    - 2.后端forms直接实例化后,调用某个字段在前端显示
    <p>{{ register_form.captcha }}{{ register_form.errors.captcha }}</p>
    

    后端基于class来写

    省去了if request.method == "POST"等重复性代码

    from django.views.generic.base import View
    from django.contrib.auth import authenticate, login, logout
    
    class LoginView(View):
        def get(self, request):
            return render(request, "login.html")
    
        def post(self, request):
            login_form = LoginForm(request.POST)
            if login_form.is_valid():
                user_name = request.POST.get("username", "")
                pass_word = request.POST.get("password", "")
                user = authenticate(username=user_name, password=pass_word)
                print(user)
                if user is not None:
                    if user.is_active:
                        login(request, user)
                        return render(request, "index.html")
                    else:
                        return render(request, "login.html", {"msg": "用户未激活"})
                else:
                    return render(request, "login.html", {"msg": "用户不存在"})
            else:
                return render(request, "login.html", {"msg": "用户不存在", "login_form": login_form})
    
    

    邮箱配置

    EMAIL_HOST = "smtp.sina.com"
    EMAIL_PORT = 25
    EMAIL_HOST_USER = "lanny@sina.com"
    EMAIL_HOST_PASSWORD = "123456"
    EMAIL_USE_TLS = False
    EMAIL_FROM = "lanny@sina.com"
    

    logout退出view

    class LogoutView(View):
        def get(self, request):
            logout(request)
            return HttpResponseRedirect(reverse("index"))
    
    

    图形验证码:

    pip install  django-simple-captcha
    

    参考: http://django-simple-captcha.readthedocs.io/en/latest/usage.html#installation

    django国际化

    LANGUAGE_CODE = 'zh-hans'
    TIME_ZONE = 'Asia/Shanghai'
    
    USE_TZ = False              #数据库入库时间,使用本地时间,而非UTC时间
    

    py3 mysql-python驱动安装

    - 安装
    pip install pymysql
    
    - 在站点的__init__.py文件中添加
    import pymysql
    pymysql.install_as_MySQLdb()
    
    - 修改settings
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            "HOST": '127.0.0.1',
            'PORT': 3306,
            'USER':'root',
            'PASSWORD': '',
            'NAME': 'bbs',
        }
    }
    
    makemigrations
    migrate
    
    - 然后navicat看看表存在没.
    

    导入django项目

    使用settings里的变量

    from django.conf import settings
    
    

    django mysql配置

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': APP_CODE,
            'USER': 'root',
            'PASSWORD': 'root',
            'HOST': 'localhost',
            'PORT': '3306',
            'CONN_MAX_AGE': 60,
        },
    }
    

    media_root设置

    settings.py
    
    MEDIA_URL = '/media/'
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
    
    from django.views.static import serve
    
    
    # 课程机构
    path('org_list/', org_views.OrgView.as_view(), name="org_list"),
    ## 配置上传文件的访问处理函数  这里使用django内置的serve来返回MEDIA_ROOT
    url(r'^media/(?P<path>.*)', serve, {'document_root':MEDIA_ROOT}),
    
  • 相关阅读:
    MyEclipse 2016CI破解版for Mac
    关于Mac系统中my sql 和navicat for mysql 的连接问题。
    二分总结
    递推总结
    区间DP学习笔记 6/20
    搜索考试
    模板整理
    防线 2020/3/31
    JS 循环遍历JSON数据
    pm am 12小时格式化
  • 原文地址:https://www.cnblogs.com/iiiiiher/p/8204099.html
Copyright © 2011-2022 走看看