正如标题所说,是否可以同时运行2个django项目?因为默认情况下,所有 django 都通过http://127.0.0.1:8000/运行。无论如何,我可以更改 django 项目的端口号吗?
我的任务是这样的:集成 django 1 api 和 django 2 api,在同一服务器/PC上设置两个 django 应用程序,具有不同的端口
据我所知,我可以更改 settings.py 数据库部分中的端口号。我似乎也找不到很多关于此的信息。
我找到的唯一解决方案是运行此命令:
manage.py runserver 8005
Run Code Online (Sandbox Code Playgroud)
将允许 django 项目在 8005 端口运行。
但是是否可以不编写命令而只在 settings.py 或其他文件中执行此操作?据我所知,这只是为了开发短语。如果是生产版的话,就不能这样使用。
我看过很多解决方案,但似乎没有一个能回答问题。
我的用户模型现在正在使用 AbstractUser。有没有办法让用户名(unique = False)
因为我想让用户能够重复使用相同的用户名,因为我使用的登录是通过电子邮件地址和密码
下面是我尝试过但不起作用的代码。
代码:
class MyUser(AbstractUser):
username = models.CharField(max_length=30, unique=False)
Run Code Online (Sandbox Code Playgroud)
错误:
customuser.MyUser: (auth.E003) 'MyUser.username' must be unique because it is named as the 'USERNAME_FI ELD'
经过数小时的搜索,我发现了许多相关但无法提供帮助的帖子。
我想要做的是输入例如:10:30 AM 到 TimeField。
在浏览器上的 django rest 框架 API 中,它使用这种上午 10:30 格式 ( '%I:%M %p')。
但是当我使用邮递员来测试它时,输出是 24 小时格式('%H:%M:%S')。我也尝试使用 10:30 PM 作为输入,但我得到的输出是 10:30:00 而不是 22:30:00。
我发现的许多答案都建议settings.py使用以下行更改 TimeField 格式:
TIME_INPUT_FORMATS = ('%I:%M %p',)
Run Code Online (Sandbox Code Playgroud)
但这对我不起作用。
很抱歉我在 django rest 框架方面缺乏经验,因为我还在学习。
这是结果的屏幕截图。在浏览器 API 上:
关于邮递员:
所以我最近尝试使用djoser,我想使用电子邮件而不是用户名来登录.
Djoser:http://djoser.readthedocs.io/en/latest/index.html
然后我尝试自定义令牌创建/登录以在serializers.py中从用户名更改为电子邮件
原版的
class TokenCreateSerializer(serializers.Serializer):
password = serializers.CharField(
required=False, style={'input_type': 'password'}
)
default_error_messages = {
'invalid_credentials': constants.INVALID_CREDENTIALS_ERROR,
'inactive_account': constants.INACTIVE_ACCOUNT_ERROR,
}
def __init__(self, *args, **kwargs):
super(TokenCreateSerializer, self).__init__(*args, **kwargs)
self.user = None
self.fields[User.USERNAME_FIELD] = serializers.CharField(
required=False
)
def validate(self, attrs):
self.user = authenticate(
username=attrs.get(User.USERNAME_FIELD),
password=attrs.get('password')
)
self._validate_user_exists(self.user)
self._validate_user_is_active(self.user)
return attrs
def _validate_user_exists(self, user):
if not user:
self.fail('invalid_credentials')
def _validate_user_is_active(self, user):
if not user.is_active:
self.fail('inactive_account')
Run Code Online (Sandbox Code Playgroud)
编辑
class TokenCreateSerializer(serializers.Serializer):
password = serializers.CharField(
required=False, style={'input_type': 'password'}
)
default_error_messages = {
'invalid_credentials': …Run Code Online (Sandbox Code Playgroud) 所以我有这个自定义寄存器api注册用户,但是当用户成功注册时,我希望它有这条消息"你已经成功注册了一个帐户!" 但我尝试了不同的方法,但得到一个错误.
serializer.py
class UserCreate2Serializer(ModelSerializer):
email = EmailField(label='Email Address')
valid_time_formats = ['%H:%M', '%I:%M%p', '%I:%M %p']
birthTime = serializers.TimeField(format='%I:%M %p', input_formats=valid_time_formats, allow_null=True, required=False)
class Meta:
model = MyUser
fields = ['username', 'password', 'email', 'first_name', 'last_name', 'gender', 'nric', 'birthday', 'birthTime']
extra_kwargs = {"password": {"write_only": True}}
def validate(self, data): # to validate if the user have been used
email = data['email']
user_queryset = MyUser.objects.filter(email=email)
if user_queryset.exists():
raise ValidationError("This user has already registered.")
return data
def create(self, validated_data):
username = validated_data['username']
password = validated_data['password'] …Run Code Online (Sandbox Code Playgroud) 我正在尝试对API发布请求,并将结果保存到我的数据库表之一.
这是我的代码.
这是我的模特.patientId是MyUser表的userId的外键
class MyUser(AbstractUser):
userId = models.AutoField(primary_key=True)
gender = models.CharField(max_length=6, blank=True, null=True)
nric = models.CharField(max_length=9, blank=True, null=True)
birthday = models.DateField(blank=True, null=True)
birthTime = models.TimeField(blank=True, null=True)
class BookAppt(models.Model):
clinicId = models.CharField(max_length=20)
patientId = models.ForeignKey(MyUser, on_delete=models.CASCADE)
scheduleTime = models.DateTimeField(blank=True, null=True)
ticketNo = models.CharField(max_length=5)
status = models.CharField(max_length=20)
Run Code Online (Sandbox Code Playgroud)
view.py.api url来自另一个django项目
@csrf_exempt
def my_django_view(request):
if request.method == 'POST':
r = requests.post('http://127.0.0.1:8000/api/makeapp/', data=request.POST)
else:
r = requests.get('http://127.0.0.1:8000/api/makeapp/', data=request.GET)
if r.status_code == 201 and request.method == 'POST':
data = r.json()
print(data)
patient = request.data['patientId']
patientId = …Run Code Online (Sandbox Code Playgroud)