[py]django常用配置

图形验证码:

pip install  django-simple-captcha

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

新建project

django-admin startproject mysite
mysite
├── manage.py
└── mysite
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

新建app

python manage.py startapp learn 

修改setting–添加app

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'learn',
)

urls包含设置

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py
    learn/
        urls.py
        ...
mysite/urls.py

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    # 别忘记在顶部引入 include 函数
    url(r'^learn/', include('learn.urls')),
]

注意:

url(r'^/learn/', include('learn.urls')), #不能这样写(learn前加/),否则报错
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'),
]

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

url(r'^$', TemplateView.as_view(template_name="index.html"), name="index"),
add2.html
...
<a href='{% url "learn:add2" 4 5 %}'>4+5</a>

会渲染成:

<a href='/users/4/5/'>4+5</a>

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">

视图配置例子


def add(request):
    return render(request, "add2.html")


def add2(request, a, b):
    c = int(a) + int(b)
    return HttpResponse(str(c))

python3 django 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国际化

LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'

USE_TZ = False

替换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

邮箱配置

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"

返回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"),
]

reverse函数解析url name

from django.urls import reverse


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

后端基于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})

退出view

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

表单渲染

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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值