(Django)Web网页导入pycharm时遇到的问题集合

入门项目

  1. 在js文件中导入img文件无法导入
    写错路径
    例如应该写为:arr[0]="../static/img/character1.png";
  2. 每个页面都要{% load static %},很麻烦
    在setting文件中加入:

‘builtins’:[‘django.templatetags.static’],

位置如下:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')]
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'builtins':['django.templatetags.static'],
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

模型建立

  1. TypeError: init() got an unexpected keyword argument ‘min_length’
    不是设置min_length
  2. django.db.utils.OperationalError: (1118, 'Row size too large. The maximum row size for the used table type
    …或者别的错误提示,反正是too large
    错误原因:max_length太过于大了
    去除max_length后会显示ERRORS: booksmodels.Books.one_contain: (fields.E120) CharFields must define a 'max_length' attribute.
    因为对于CharField来说max_length是必填项
    解决方法有两种
    一、改小最大长度
    二、改为TextField,可以不设置最大长度
  3. 修改前端用户密码时候报错:Cannot resolve keyword 'user_id' into field. Choices are: date_joined, email, first_name, groups, id, is_active, is_staff, is_superuser, last_login, last_name, logentry, myuser, password, user_permissions, username
    名字填写没问题

毕业设计

创建项目过程

  1. New Project-Django
    可以选择填写more settings中的templates folder和application name为templates和app,templates中放网页,app中放配置文件,如settings、urls.py…
  2. 新建static文件夹,专门放静态文件,如css、js、img等
  3. 在app-urls.py的urlpatterns = []加入页面路由:如path('', include('index.urls'), name="index"),或者path('about-section/', include('about-section.urls'), name="about-section"),这里的name可以在分别的子app中设置app_name即可绑定
    注:每新建一个文件夹/路由页面都需在settings的INSTALLED_APPS中添加名字,如
    'index',
    'about_section',
    'environmental_protection',
    'memorabilia',

创建文件夹index,新建urls.py文件,添加代码:

from django.urls import path
from index import views
app_name = "index"
urlpatterns = [
    path('', views.index,name='index'),#进入该界面后不输入任何
]

新建views.py文件:

from django.shortcuts import render

def index(request):
    return render(request,'index.html')

现在可以显示首页内容了,但样式等信息没有

  1. 正常显示css/js/img页面:
    在settings文件中台南佳静态文件目录:STATICFILES_DIRS=[os.path.join(BASE_DIR,'static')]
    在html文件中修改获取样式的代码:<link rel="stylesheet" type="text/css" href="static/css/index.css" />
    注:如有问题,尝试在html文件最上方加入:{% load static %}
  2. 建立后台:
    草稿纸设计初步用户表:例如:ID 用户名 密码 是否身份识别标识
    在settings.py文件中填写:
DATABASES = {
   
    'default': {
   
        # 数据库的类型
        'ENGINE': 'django.db.backends.mysql',
        # 所使用的数据库的名字
        'NAME': 'graduation_project',
        # 数据库服务器的用户
        'USER': 'root',
        # 密码
        'PASSWORD': '1234',
        # 主机
        'HOST': '127.0.0.1',
        # 端口
        'POST': '3306',
    }
}
  1. 在app配置文件-init.py中填写:
    导入安装pymysql
import pymysql
pymysql.install_as_MySQLdb()
  1. 在terminal中输入命令行:python manage.py migrate,迁移数据库
  2. 建立超级用户
    利用命令行:python manage.py createsuperuser
    输入用户名、邮箱、密码,创建成功
  3. 后台显示admin界面自建模型英文改为中文:settings文件:LANGUAGE_CODE = ‘zh-hans’
  4. 设置登录功能模块:
    新建app:my_users(自定义)
    加入.py文件:admin.py、apps.py、models.py
    admin.py
from django.contrib import admin
from .models import MyUser


# Register your models here.
class MyUserAdmin(admin.ModelAdmin):
    list_display = ("id","card_whether")

# admin.site.register(FrontUser)
# Register your models here.
admin.site.register(MyUser, MyUserAdmin)

apps.py

from django.apps import AppConfig


class MyUsersConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'my_users'

models.py

from django.db import models
from django.contrib.auth.models import User


class MyUser(models.Model):
    user_id = models.OneToOneField(User, on_delete=models.CASCADE, verbose_name="用户")
    # name = models.CharField(max_length=20,unique=True, verbose_name="用户名") #verbose_name把后台显示改成中文
    # user_password=models.CharField(max_length=30,verbose_name="用户密码")
    card_whether=models.BooleanField(default=True, verbose_name="身份证验证标识符")

    class Meta:
        verbose_name = "网页登录用户"
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.user_id.username

做了以上操作千万不要忘记在settings中的INSTALLED_APPS添加你所新建的文件夹哦!
现在在admin界面就有你所创建的用户类了。

  1. 登录注册form表单修改&创建:
    注:name与相应app中views.py和forms.py中的名字一一对应
    注册:
<form method="post">
     {
   % csrf_token %}
     <div class="close-btn" onclick="signup()">
         ×
     </div>
     <h1>注册</h1>
     <div class="input-field"><input type="text" name="username" placeholder="用户名" class="validate"></div>
     <div class="input-field"><input type="password" name="pw1" placeholder="密码" class="validate"></div>
     <div class="input-field"><input type="password" name="pw2" placeholder="确认密码" class="validate"></div>
     <button type="submit" class="second-button">注册</button>
     <p>我有账号,回到<a onclick="togglePopup();signup()" href='javascript:;'>登录</a></p>
 </form>

登录:

<form method="post">
    {
   % csrf_token %}
    <div class="close-btn" onclick="togglePopup()">
        ×
    </div>
    <h1>登录</h1>
    <div class="input-field"><input type="text" name="username" placeholder="用户名" class="validate"></div>
    <div class="input-field"><input type="password" name="password" placeholder="密码" class="validate"></div>
    <button type="submit" class="second-button">登录</button>
    <p>你没有账号? <a onclick="signup();togglePopup()" href='javascript:;'>注册</a></p>
</form>
  1. 完善注册功能:
    在注册页面app中新建文件:apps.py、views.py和forms.py
    apps.py
from django.apps import AppConfig
class RegistrationConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'index'

views.py

from django.shortcuts import render

from django.contrib.auth.hashers import make_password
from django.contrib.auth.models import User
from django.http import HttpResponseRedirect
from django.shortcuts import render, redirect
from index.forms import FormRegistration
from django.contrib import messages

def index(request):
    if request.method == 'GET':
        return render(request, 'index.html')
    if request.method == 'POST':
        form = FormRegistration(request.POST)
        if form.is_valid():
            # 把数据保存到数据库
            # 伪提交
            front_user = form.save(commit=False)
            username = form.cleaned_data.get("username")
            password = form.cleaned_data.get("pw2")
            user = User(username=username, password=make_password(password))
            user.save()
            front_user.user_id = user
            front_user.save()
            messages.success(request, "注册成功!请在点击个人中心进行登录!")
            return HttpResponseRedirect('/')
        else:
            username = form.cleaned_data.get("username")
            password = form.cleaned_data.get("pw2")
            if username is None:
                messages.success(request, "注册失败!用户名为空!")
                return render(request, 'index.html')
            messages.success(request, "注册失败!密码输入错误!")
            print(form.errors.get_json_data())
            return render(request, 'index.html')

forms.py

# 登录页面form文件
from django import forms
from django.http import HttpResponse

from my_users.models import MyUser


class FormRegistration(forms.ModelForm):
    username = forms.CharField(max_length=10, min_length=1)
    pw1 = forms.CharField(max_length=20, min_length=6)
    pw2 = forms.CharField(max_length=20, min_length=6)
    class Meta:
        model = MyUser
        exclude=["user_id"]
    def clean_username(self):
        username=self.cleaned_data.get("username")
        if username=="me":
            raise forms.ValidationError("用户名不能是me!")
        return username

    def clean(self):
        clened_data=super().clean()
        pw1=clened_data.get("pw1")
        pw2=clened_data.get("pw2")
        if pw1!=pw2:
            raise forms.ValidationError("两次密码输入不一致!!")
        return clened_data
  1. 输入命令行的位置:tools-run manage.py Task
    输入命令行:
    python manage.py makemigrations
    python manage.py migrate
    makemigrations
    migrate
  2. 完成以上内容,注册功能完成,在页面输入点击注册,可以在数据库中显示信息!
  3. 退出登录功能:
    url中添加:path('logout/', views.logout, name='index'), # 退出登录
    views文件中:
def logout(request):
    # 实现退出功能
    # 删除session
    if 'username' in request.session:
        del request.session['username']
    resp = HttpResponseRedirect('/')
    # 删除cookie
    if 'username' in request.COOKIES:
        resp.delete_cookie('username')
    auth.logout(request)
    messages.success(request, "已退出登录")
    return resp

绑定html标签:

<a class="out" href='/personal_center/logout'>
	<p>退出登录</p>
</a>
  1. 登录注册使用弹框形式,都是post,如何在后台区分:
    html页面给提交按钮button/input添加name:详见问题19
  2. 判断用户登录状态跳转页面:
    settings文件中MIDDLEWARE必须要有:
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',

判断是否登录:
if request.user.is_authenticated():
判断登录进入个人中心页面,未登录提示需要登录:

def personal(request):
    if request.user.is_authenticated():
        return HttpResponseRedirect('/')
    else:
        messages.success(request, "请先进行登录!")
        return HttpResponseRedirect('/')
path('personal/', views.personal, name='index'),
<li><a onclick="togglePopup()" target="_blank" href="/personal_center">个人中心</a></li>
  1. 获取登录用户的用户名并显示在HTML页面:
    <h3 name="username">用户名:{ { request.user }}</h3>
  2. 用户登录为AnonymousUser,匿名用户,无法获取用户名:
    在登录视图文件的提示登录成功前一行加一行代码:auth.login(request, user)
  3. 各种html跳转页面方法:
return render(request, 'index.html')
return HttpResponseRedirect('/')
return redirect('/index/')
return redirect('/personal_center', context={
   
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值